diff --git a/doc/src/user/en/21-communications.rst b/doc/src/user/en/21-communications.rst index 41a248464..c092e4260 100644 --- a/doc/src/user/en/21-communications.rst +++ b/doc/src/user/en/21-communications.rst @@ -3,7 +3,7 @@ Subcontractor work description It is possible to keep this field empty. -But if you do, you could get errors in communication functionality when multiple emtpy fields exist. +But if you do, you could get errors in communication functionality when multiple empty fields exist. We recommend to always use a unique work description. diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java index 98e379e0a..6edfd44a6 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderElement.java @@ -104,7 +104,7 @@ public abstract class OrderElement extends IntegrationEntity implements ICriteri protected OrderLineGroup parent; protected CriterionRequirementOrderElementHandler criterionRequirementHandler = - CriterionRequirementOrderElementHandler.getInstance(); + CriterionRequirementOrderElementHandler.getInstance(); /** * This field is transient. @@ -355,7 +355,7 @@ public abstract class OrderElement extends IntegrationEntity implements ICriteri private boolean wasASchedulingPoint() { TaskSource currentTaskSource = getTaskSource(); // Check if the existing TaskSource is inconsistent with the current scheduling state - if (currentTaskSource != null && + if (currentTaskSource != null && currentTaskSource.getTask() != null && currentTaskSource.getTask().isLeaf() && getSchedulingStateType() != Type.SCHEDULING_POINT) { @@ -535,10 +535,6 @@ public abstract class OrderElement extends IntegrationEntity implements ICriteri this.getInfoComponent().setName(name); } - public abstract boolean isLeaf(); - - public abstract List getChildren(); - public Date getInitDate() { return initDate; } @@ -654,9 +650,8 @@ public abstract class OrderElement extends IntegrationEntity implements ICriteri Validate.notNull(label); if (!checkAncestorsNoOtherLabelRepeated(label)) { - throw new IllegalArgumentException( - "An ancestor has the same label assigned, " + - "so this element is already inheriting this label"); + throw new IllegalArgumentException("An ancestor has the same label assigned, " + + "so this element is already inheriting this label"); } removeLabelOnChildren(label); @@ -856,10 +851,9 @@ public abstract class OrderElement extends IntegrationEntity implements ICriteri return Collections.unmodifiableSet(criterionRequirements); } - /* + /** * Operations to manage the criterion requirements of a orderElement - * (remove, adding, update of the criterion requirement of the orderElement - * such as the descendant's criterion requirement) + * (remove, adding, update of the criterion requirement of the orderElement such as the descendant's criterion requirement) */ public void setValidCriterionRequirement(IndirectCriterionRequirement requirement,boolean valid) { diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLine.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLine.java index 77dd65650..d4ec9fb23 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLine.java +++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/OrderLine.java @@ -199,7 +199,7 @@ public class OrderLine extends OrderElement { } /** - * Operations for manipulating {@link HoursGroup} + * Operations for manipulating {@link HoursGroup}. */ public void setWorkHours(Integer workHours) throws IllegalArgumentException { @@ -349,8 +349,7 @@ public class OrderLine extends OrderElement { } @Override - public DirectAdvanceAssignment calculateFakeDirectAdvanceAssignment( - IndirectAdvanceAssignment indirectAdvanceAssignment) { + public DirectAdvanceAssignment calculateFakeDirectAdvanceAssignment(IndirectAdvanceAssignment indirectAdvanceAssignment) { return null; } diff --git a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/consolidations/CalculatedConsolidation.java b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/consolidations/CalculatedConsolidation.java index 6aa59c90d..1942e0544 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/planner/entities/consolidations/CalculatedConsolidation.java +++ b/libreplan-business/src/main/java/org/libreplan/business/planner/entities/consolidations/CalculatedConsolidation.java @@ -37,58 +37,50 @@ import org.libreplan.business.util.deepcopy.Strategy; public class CalculatedConsolidation extends Consolidation { - private SortedSet consolidatedValues = new TreeSet( - new ConsolidatedValueComparator()); - - @AfterCopy - private void instantiateConsolidatedValuesWithComparator() { - SortedSet previous = consolidatedValues; - consolidatedValues = new TreeSet( - new ConsolidatedValueComparator()); - consolidatedValues.addAll(previous); - } + private SortedSet consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator()); @OnCopy(Strategy.SHARE) private IndirectAdvanceAssignment indirectAdvanceAssignment; - public static CalculatedConsolidation create(Task task, - IndirectAdvanceAssignment indirectAdvanceAssignment) { - return create(new CalculatedConsolidation(task, - indirectAdvanceAssignment)); - } - - public static CalculatedConsolidation create(Task task, - IndirectAdvanceAssignment indirectAdvanceAssignment, - SortedSet consolidatedValues) { - return create(new CalculatedConsolidation(task, - indirectAdvanceAssignment, - consolidatedValues)); - } - /** * Constructor for {@link DeepCopy}. DO NOT USE! */ public CalculatedConsolidation() { - } - protected CalculatedConsolidation(Task task, - IndirectAdvanceAssignment indirectAdvanceAssignment, - SortedSet consolidatedValues) { - this(task, indirectAdvanceAssignment); - this.setConsolidatedValues(consolidatedValues); - } - - public CalculatedConsolidation(Task task, - IndirectAdvanceAssignment indirectAdvanceAssignment) { + public CalculatedConsolidation(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment) { super(task); this.indirectAdvanceAssignment = indirectAdvanceAssignment; } + protected CalculatedConsolidation(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment, + SortedSet consolidatedValues) { + + this(task, indirectAdvanceAssignment); + this.setConsolidatedValues(consolidatedValues); + } + + @AfterCopy + private void instantiateConsolidatedValuesWithComparator() { + SortedSet previous = consolidatedValues; + consolidatedValues = new TreeSet<>(new ConsolidatedValueComparator()); + consolidatedValues.addAll(previous); + } + + public static CalculatedConsolidation create(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment) { + return create(new CalculatedConsolidation(task, indirectAdvanceAssignment)); + } + + public static CalculatedConsolidation create(Task task, IndirectAdvanceAssignment indirectAdvanceAssignment, + SortedSet consolidatedValues) { + + return create(new CalculatedConsolidation(task, indirectAdvanceAssignment, consolidatedValues)); + } + @Override public SortedSet getConsolidatedValues() { - SortedSet result = new TreeSet( - new ConsolidatedValueComparator()); + SortedSet result; + result = new TreeSet<>(new ConsolidatedValueComparator()); result.addAll(consolidatedValues); return result; } @@ -97,13 +89,11 @@ public class CalculatedConsolidation extends Consolidation { return consolidatedValues; } - public void setConsolidatedValues( - SortedSet consolidatedValues) { + public void setConsolidatedValues(SortedSet consolidatedValues) { this.consolidatedValues = consolidatedValues; } - public void setIndirectAdvanceAssignment( - IndirectAdvanceAssignment indirectAdvanceAssignment) { + public void setIndirectAdvanceAssignment(IndirectAdvanceAssignment indirectAdvanceAssignment) { this.indirectAdvanceAssignment = indirectAdvanceAssignment; } diff --git a/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/AfterCopy.java b/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/AfterCopy.java index d1d58347d..0776f278c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/AfterCopy.java +++ b/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/AfterCopy.java @@ -28,11 +28,9 @@ import java.lang.annotation.Target; /** * @author Óscar González Fernández - * */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AfterCopy { - } diff --git a/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/DeepCopy.java b/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/DeepCopy.java index ed8d82113..fe1275b6f 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/DeepCopy.java +++ b/libreplan-business/src/main/java/org/libreplan/business/util/deepcopy/DeepCopy.java @@ -47,18 +47,22 @@ import org.libreplan.business.workingday.EffortDuration; /** * @author Óscar González Fernández - * */ public class DeepCopy { - private static Set> inmmutableTypes = new HashSet>(Arrays - .> asList(Boolean.class, String.class, BigDecimal.class, - Double.class, Float.class, Integer.class, Short.class, - Byte.class, Character.class, LocalDate.class, - DateTime.class, EffortDuration.class)); + + private static Set> inmmutableTypes = new HashSet<>(Arrays.>asList( + Boolean.class, String.class, BigDecimal.class, + Double.class, Float.class, Integer.class, + Short.class, Byte.class, Character.class, + LocalDate.class, DateTime.class, EffortDuration.class)); + + private static List DEFAULT_CUSTOM_COPIERS = + Arrays.asList(new DateCopy(), new SetCopy(), new MapCopy(), new ListCopy()); + + private Map alreadyCopiedObjects = new HashMap<>(); public static boolean isImmutableType(Class klass) { - return klass.isPrimitive() || isEnum(klass) - || inmmutableTypes.contains(klass); + return klass.isPrimitive() || isEnum(klass) || inmmutableTypes.contains(klass); } private static boolean isEnum(Class klass) { @@ -69,16 +73,17 @@ public class DeepCopy { } currentClass = currentClass.getSuperclass(); } while (currentClass != null); + return false; } public interface ICustomCopy { - public boolean canHandle(Object object); - public Object instantiateCopy(Strategy strategy, Object originValue); + boolean canHandle(Object object); - public void copyDataToResult(DeepCopy deepCopy, Object origin, - Strategy strategy, Object result); + Object instantiateCopy(Strategy strategy, Object originValue); + + void copyDataToResult(DeepCopy deepCopy, Object origin, Strategy strategy, Object result); } private static class DateCopy implements ICustomCopy { @@ -89,9 +94,8 @@ public class DeepCopy { } @Override - public void copyDataToResult(DeepCopy deepCopy, Object origin, - Strategy strategy, Object result) { - // already completed + public void copyDataToResult(DeepCopy deepCopy, Object origin, Strategy strategy, Object result) { + // Already completed } @Override @@ -102,7 +106,7 @@ public class DeepCopy { } - private static abstract class CollectionCopy implements ICustomCopy { + private abstract static class CollectionCopy implements ICustomCopy { @Override public Object instantiateCopy(Strategy strategy, Object originValue) { @@ -112,13 +116,11 @@ public class DeepCopy { protected abstract Collection getResultData(Object originValue); @Override - public void copyDataToResult(DeepCopy deepCopy, Object origin, - Strategy strategy, Object result) { + public void copyDataToResult(DeepCopy deepCopy, Object origin, Strategy strategy, Object result) { copy(deepCopy, origin, strategy, (Collection) result); } - private void copy(DeepCopy deepCopy, Object origin, Strategy strategy, - Collection destination) { + private void copy(DeepCopy deepCopy, Object origin, Strategy strategy, Collection destination) { Strategy childrenStrategy = getChildrenStrategy(strategy); for (Object each : originDataAsIterable(origin)) { destination.add(deepCopy.copy(each, childrenStrategy)); @@ -126,10 +128,7 @@ public class DeepCopy { } private Strategy getChildrenStrategy(Strategy strategy) { - if (strategy == Strategy.SHARE_COLLECTION_ELEMENTS) { - return Strategy.SHARE; - } - return strategy; + return strategy == Strategy.SHARE_COLLECTION_ELEMENTS ? Strategy.SHARE : strategy; } private Iterable originDataAsIterable(Object originValue) { @@ -153,10 +152,7 @@ public class DeepCopy { return new ImplementationInstantiation() { @Override protected Set createDefault() { - if (SortedSet.class.isAssignableFrom(klass)) { - return new TreeSet(); - } - return new HashSet(); + return SortedSet.class.isAssignableFrom(klass) ? new TreeSet<>() : new HashSet<>(); } }.instantiate(klass); } @@ -177,21 +173,20 @@ public class DeepCopy { return new ImplementationInstantiation() { @Override protected Object createDefault() { - return new HashMap(); + return new HashMap<>(); } }.instantiate(klass); } @Override - public void copyDataToResult(DeepCopy deepCopy, Object origin, - Strategy strategy, Object result) { - doCopy(deepCopy, (Map) ((Map) origin), strategy, ((Map) result)); + public void copyDataToResult(DeepCopy deepCopy, Object origin, Strategy strategy, Object result) { + doCopy(deepCopy, (Map) origin, strategy, ((Map) result)); } - private void doCopy(DeepCopy deepCopy, Map origin, - Strategy strategy, Map resultMap) { + private void doCopy(DeepCopy deepCopy, Map origin, Strategy strategy, Map resultMap) { Strategy keyStrategy = getKeysStrategy(strategy); Strategy valueStrategy = getValuesStrategy(strategy); + for (Entry entry : origin.entrySet()) { Object key = deepCopy.copy(entry.getKey(), keyStrategy); Object value = deepCopy.copy(entry.getValue(), valueStrategy); @@ -200,19 +195,15 @@ public class DeepCopy { } private Strategy getKeysStrategy(Strategy strategy) { - if (Strategy.ONLY_SHARE_KEYS == strategy - || Strategy.SHARE_COLLECTION_ELEMENTS == strategy) { - return Strategy.SHARE; - } - return strategy; + return Strategy.ONLY_SHARE_KEYS == strategy || Strategy.SHARE_COLLECTION_ELEMENTS == strategy + ? Strategy.SHARE + : strategy; } private Strategy getValuesStrategy(Strategy strategy) { - if (Strategy.ONLY_SHARE_VALUES == strategy - || Strategy.SHARE_COLLECTION_ELEMENTS == strategy) { - return Strategy.SHARE; - } - return strategy; + return Strategy.ONLY_SHARE_VALUES == strategy || Strategy.SHARE_COLLECTION_ELEMENTS == strategy + ? Strategy.SHARE + : strategy; } } @@ -232,7 +223,7 @@ public class DeepCopy { return new ImplementationInstantiation() { @Override protected Object createDefault() { - return new ArrayList(); + return new ArrayList<>(); } }.instantiate(klass); } @@ -242,8 +233,8 @@ public class DeepCopy { private static abstract class ImplementationInstantiation { private static final String[] VETOED_IMPLEMENTATIONS = { - "PersistentSet", "PersistentList", "PersistentMap", - "PersistentSortedSet" }; + "PersistentSet", "PersistentList", "PersistentMap", "PersistentSortedSet" + }; ImplementationInstantiation() { } @@ -251,10 +242,9 @@ public class DeepCopy { T instantiate(Class type) { if (!isVetoed(type)) { try { - Constructor constructor = type - .getConstructor(); + Constructor constructor = type.getConstructor(); return (T) type.cast(constructor.newInstance()); - } catch (Exception e) { + } catch (Exception ignored) { } } return (T) createDefault(); @@ -273,12 +263,6 @@ public class DeepCopy { protected abstract Object createDefault(); } - private static List DEFAULT_CUSTOM_COPIERS = Arrays - . asList(new DateCopy(), new SetCopy(), new MapCopy(), - new ListCopy()); - - private Map alreadyCopiedObjects = new HashMap(); - private static class ByIdentity { private final Object wrapped; @@ -318,13 +302,16 @@ public class DeepCopy { if (couldBeProxyValue == null) { return null; } + T value = desproxify(couldBeProxyValue); if (alreadyCopiedObjects.containsKey(byIdentity(value))) { return (T) alreadyCopiedObjects.get(byIdentity(value)); } + if (Strategy.SHARE == strategy || isImmutable(value)) { return value; } + ICustomCopy copier = findCopier(value); if (copier != null) { Object resultData = copier.instantiateCopy(strategy, value); @@ -332,18 +319,18 @@ public class DeepCopy { copier.copyDataToResult(this, value, strategy, resultData); return (T) resultData; } + T result = instantiateUsingDefaultConstructor(getTypedClassFrom(value)); alreadyCopiedObjects.put(byIdentity(value), result); copyProperties(value, result); - callAferCopyHooks(result); + callAfterCopyHooks(result); return result; } private T desproxify(T value) { if (value instanceof HibernateProxy) { HibernateProxy proxy = (HibernateProxy) value; - return (T) proxy.getHibernateLazyInitializer() - .getImplementation(); + return (T) proxy.getHibernateLazyInitializer().getImplementation(); } return value; } @@ -364,9 +351,7 @@ public class DeepCopy { } catch (SecurityException e) { throw new RuntimeException(e); } catch (NoSuchMethodException e) { - throw new IllegalArgumentException( - "could not invoke default no-args constructor for " - + klass, e); + throw new IllegalArgumentException("could not invoke default no-args constructor for " + klass, e); } try { return constructor.newInstance(); @@ -382,7 +367,7 @@ public class DeepCopy { if (!isIgnored(each)) { Object sourceValue = readFieldValue(source, each); if (sourceValue != null) { - Strategy strategy = getStrategy(each, sourceValue); + Strategy strategy = getStrategy(each); try { writeFieldValue(target, each, copy(sourceValue, strategy)); } catch (Exception e) { @@ -395,7 +380,7 @@ public class DeepCopy { } private List getAllFieldsFor(Object source) { - List result = new ArrayList(); + List result = new ArrayList<>(); Class currentClass = source.getClass(); while (currentClass != null) { result.addAll(Arrays.asList(currentClass.getDeclaredFields())); @@ -433,7 +418,7 @@ public class DeepCopy { } } - private Strategy getStrategy(Field field, Object sourceValue) { + private Strategy getStrategy(Field field) { OnCopy onCopy = field.getAnnotation(OnCopy.class); return onCopy != null ? onCopy.value() : null; } @@ -447,7 +432,7 @@ public class DeepCopy { return null; } - private void callAferCopyHooks(Object value) { + private void callAfterCopyHooks(Object value) { assert value != null; for (Method each : getAfterCopyHooks(value.getClass())) { each.setAccessible(true); @@ -461,7 +446,7 @@ public class DeepCopy { private List getAfterCopyHooks(Class klass) { Class current = klass; - List result = new ArrayList(); + List result = new ArrayList<>(); while (current != null) { result.addAll(getAfterCopyDeclaredAt(current)); current = current.getSuperclass(); @@ -470,7 +455,7 @@ public class DeepCopy { } private List getAfterCopyDeclaredAt(Class klass) { - List result = new ArrayList(); + List result = new ArrayList<>(); for (Method each : klass.getDeclaredMethods()) { if (isAfterCopyHook(each)) { result.add(each); diff --git a/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/DeepCopyTest.java b/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/DeepCopyTest.java index c16fab46d..9acc0a4a6 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/DeepCopyTest.java +++ b/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/DeepCopyTest.java @@ -43,6 +43,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Collections; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; @@ -58,7 +59,6 @@ import org.libreplan.business.util.deepcopy.EntityExamples.TestEnum; /** * @author Óscar González Fernández - * */ public class DeepCopyTest { @@ -69,8 +69,7 @@ public class DeepCopyTest { @Test(expected = IllegalArgumentException.class) public void theEntityToCopyMustHaveNotEmptyConstructor() { - EntityWithoutNoArgsConstructor entity = new EntityWithoutNoArgsConstructor( - "bla"); + EntityWithoutNoArgsConstructor entity = new EntityWithoutNoArgsConstructor("bla"); new DeepCopy().copy(entity); } @@ -106,11 +105,13 @@ public class DeepCopyTest { @Test public void itKnowsSomeTypesAreImmutable() { - Iterable> immutableTypes = Arrays.> asList( + Iterable> immutableTypes = Arrays.asList( String.class, BigDecimal.class, Double.class, Float.class, Integer.class, Short.class, Byte.class, Character.class, LocalDate.class, Boolean.class, DateTime.class, double.class, - float.class, int.class, short.class, byte.class, char.class); + float.class, int.class, short.class, byte.class, + char.class); + assertThat(immutableTypes, everyItem(immutable())); } @@ -150,8 +151,7 @@ public class DeepCopyTest { @Test public void setsAreCopied() { EntityA entityA = new EntityA(); - HashSet originalSet = new HashSet(asList("test", - 2, 3, new Date())); + HashSet originalSet = new HashSet<>(asList("test", 2, 3, new Date())); entityA.setSetProperty(originalSet); EntityA copy = new DeepCopy().copy(entityA); assertEquals(originalSet, copy.getSetProperty()); @@ -161,8 +161,7 @@ public class DeepCopyTest { @Test public void theSetImplementationClassIsPreservedIfPossible() { EntityA entityA = new EntityA(); - Set originalSet = new LinkedHashSet(asList("test", 2, - 3, new Date())); + Set originalSet = new LinkedHashSet<>(asList("test", 2, 3, new Date())); entityA.setSetProperty(originalSet); EntityA copy = new DeepCopy().copy(entityA); assertThat(copy.getSetProperty(), instanceOf(LinkedHashSet.class)); @@ -171,9 +170,8 @@ public class DeepCopyTest { @Test public void setsInsideSetsAreRecursivelyCopiedWithoutProblem() { EntityA entityA = new EntityA(); - HashSet innerSet = new HashSet(asList("bla", 3)); - HashSet originalSet = new HashSet(asList("test", 2, 3, - new Date(), innerSet)); + HashSet innerSet = new HashSet<>(asList("bla", 3)); + HashSet originalSet = new HashSet<>(asList("test", 2, 3, new Date(), innerSet)); entityA.setSetProperty(originalSet); EntityA copy = new DeepCopy().copy(entityA); assertEquals(originalSet, copy.getSetProperty()); @@ -183,7 +181,7 @@ public class DeepCopyTest { @Test public void mapsAreCopied() { EntityA entityA = new EntityA(); - HashMap originalMap = new HashMap(); + HashMap originalMap = new HashMap<>(); originalMap.put("aa", "blabla"); entityA.setMapProperty(originalMap); EntityA copy = new DeepCopy().copy(entityA); @@ -194,7 +192,7 @@ public class DeepCopyTest { @Test public void mapImplementationIsPreservedIfPossible() { EntityA entityA = new EntityA(); - LinkedHashMap mapProperty = new LinkedHashMap(); + LinkedHashMap mapProperty = new LinkedHashMap<>(); mapProperty.put("ab", "abc"); entityA.setMapProperty(mapProperty); EntityA copy = new DeepCopy().copy(entityA); @@ -204,7 +202,7 @@ public class DeepCopyTest { @Test public void listsAreCopied() { EntityA entityA = new EntityA(); - ArrayList originalList = new ArrayList(); + ArrayList originalList = new ArrayList<>(); originalList.add(2); originalList.add(10); originalList.add("abla"); @@ -217,7 +215,7 @@ public class DeepCopyTest { @Test public void listImplementationIsPreservedIfPossible() { EntityA entityA = new EntityA(); - LinkedList originalList = new LinkedList(); + LinkedList originalList = new LinkedList<>(); originalList.add(2); entityA.setListProperty(originalList); EntityA copy = new DeepCopy().copy(entityA); @@ -244,7 +242,7 @@ public class DeepCopyTest { @Test public void sharedCollectionsAreCopiedWithTheSameReference() { EntityA entityA = new EntityA(); - List originalList = Arrays.asList("bla"); + List originalList = Collections.singletonList("bla"); entityA.setSharedListProperty(originalList); EntityA copy = new DeepCopy().copy(entityA); assertSame(originalList, copy.getSharedListProperty()); @@ -253,64 +251,54 @@ public class DeepCopyTest { @Test public void sharedCollectionElementsKeptTheReferences() { EntityA entityA = new EntityA(); - HashSet originalSet = new HashSet(); + HashSet originalSet = new HashSet<>(); originalSet.add(new Date()); entityA.setSharedElementsProperty(originalSet); EntityA copy = new DeepCopy().copy(entityA); assertNotSame(originalSet, copy.getSharedElementsProperty()); - assertSame(originalSet.iterator().next(), copy - .getSharedElementsProperty().iterator().next()); + assertSame(originalSet.iterator().next(), copy.getSharedElementsProperty().iterator().next()); } @Test public void sharedKeyElementsKeepTheSameReferencesForTheKeys() { EntityA entityA = new EntityA(); - Map originalMap = new HashMap(); + Map originalMap = new HashMap<>(); EntityA originalValue = new EntityA(); Date originalKey = new Date(); originalMap.put(originalKey, originalValue); entityA.setSharedKeysMapProperty(originalMap); EntityA copy = new DeepCopy().copy(entityA); - Map sharedKeysMapProperty = copy - .getSharedKeysMapProperty(); - assertSame(originalKey, sharedKeysMapProperty.keySet().iterator() - .next()); - assertNotSame(originalValue, sharedKeysMapProperty.values().iterator() - .next()); + Map sharedKeysMapProperty = copy.getSharedKeysMapProperty(); + assertSame(originalKey, sharedKeysMapProperty.keySet().iterator().next()); + assertNotSame(originalValue, sharedKeysMapProperty.values().iterator().next()); } @Test public void sharedValueElementsKeepTheSameReferencesForTheValues() { EntityA entityA = new EntityA(); - Map originalMap = new HashMap(); + Map originalMap = new HashMap<>(); EntityA originalValue = new EntityA(); Date originalKey = new Date(); originalMap.put(originalKey, originalValue); entityA.setSharedValuesMapProperty(originalMap); EntityA copy = new DeepCopy().copy(entityA); - Map copiedMap = copy - .getSharedValuesMapProperty(); - assertNotSame(originalKey, copiedMap.keySet().iterator() - .next()); - assertSame(originalValue, copiedMap.values().iterator() - .next()); + Map copiedMap = copy.getSharedValuesMapProperty(); + assertNotSame(originalKey, copiedMap.keySet().iterator().next()); + assertSame(originalValue, copiedMap.values().iterator().next()); } @Test public void aSharedCollectionElementsMapKeepTheSameReferencesForTheKeysAndTheValues() { EntityA entityA = new EntityA(); - Map originalMap = new HashMap(); + Map originalMap = new HashMap<>(); EntityA originalValue = new EntityA(); Date originalKey = new Date(); originalMap.put(originalKey, originalValue); entityA.setSharedCollectionElementsMapProperty(originalMap); EntityA copy = new DeepCopy().copy(entityA); - Map copiedMap = copy - .getSharedCollectionElementsMapProperty(); - assertSame(originalKey, copiedMap.keySet().iterator() - .next()); - assertSame(originalValue, copiedMap.values().iterator() - .next()); + Map copiedMap = copy.getSharedCollectionElementsMapProperty(); + assertSame(originalKey, copiedMap.keySet().iterator().next()); + assertSame(originalValue, copiedMap.values().iterator().next()); } @Test @@ -342,12 +330,11 @@ public class DeepCopyTest { EntityA entityA = new EntityA(); parent.setEntityAProperty(entityA); entityA.setParentProperty(parent); - HashSet originalSet = new HashSet(); + HashSet originalSet = new HashSet<>(); parent.setSetProperty(originalSet); entityA.setSetProperty(originalSet); Parent copy = new DeepCopy().copy(parent); - assertSame(copy.getSetProperty(), copy.getEntityAProperty() - .getSetProperty()); + assertSame(copy.getSetProperty(), copy.getEntityAProperty().getSetProperty()); } @Test @@ -382,8 +369,8 @@ public class DeepCopyTest { public void equalObjectsButDifferentAreNotReused() { EntityA entityA = new EntityA(); DeepCopy deepCopy = new DeepCopy(); - entityA.setSet1(new HashSet()); - entityA.setSet2(new HashSet()); + entityA.setSet1(new HashSet<>()); + entityA.setSet2(new HashSet<>()); EntityA copied = deepCopy.copy(entityA); assertNotSame(copied.getSet1(), copied.getSet2()); } diff --git a/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/EntityExamples.java b/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/EntityExamples.java index 32a215c22..0129f14b6 100644 --- a/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/EntityExamples.java +++ b/libreplan-business/src/test/java/org/libreplan/business/util/deepcopy/EntityExamples.java @@ -30,7 +30,6 @@ import java.util.Set; /** * @author Óscar González Fernández - * */ public class EntityExamples { @@ -40,15 +39,14 @@ public class EntityExamples { public enum TestEnum { A { }, - B; + B } public static class Parent { + private EntityA entityAProperty; - private String prueba = "bar"; - - private Set setProperty = new HashSet(); + private Set setProperty = new HashSet<>(); public EntityA getEntityAProperty() { return entityAProperty; @@ -70,9 +68,8 @@ public class EntityExamples { public static class EntityA { - private static final String staticProperty = "foo"; - private final String finalProperty = "bar"; + private String stringProperty; private int intProperty = 2; @@ -83,7 +80,7 @@ public class EntityExamples { private Set setProperty; - private Map mapProperty = new HashMap(); + private Map mapProperty = new HashMap<>(); private List listProperty; @@ -314,9 +311,6 @@ public class EntityExamples { } public static class SubClassExample extends SuperclassExample { - - private int intProperty; - } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/AllocationRow.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/AllocationRow.java index 988bf2d65..637b577e3 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/AllocationRow.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/AllocationRow.java @@ -593,11 +593,11 @@ public abstract class AllocationRow { } private Constraint constraintForHoursInput() { - return (effortInput.isDisabled()) ? null : CONSTRAINT_FOR_HOURS_INPUT; + return effortInput.isDisabled() ? null : CONSTRAINT_FOR_HOURS_INPUT; } private Constraint constraintForResourcesPerDayInput() { - return (intendedResourcesPerDayInput.isDisabled()) ? null : CONSTRAINT_FOR_RESOURCES_PER_DAY; + return intendedResourcesPerDayInput.isDisabled() ? null : CONSTRAINT_FOR_RESOURCES_PER_DAY; } private void updateUIWithModificationsDone() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationController.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationController.java index c6eeea55b..e1ff55c77 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/allocation/ResourceAllocationController.java @@ -141,8 +141,10 @@ public class ResourceAllocationController extends GenericForwardComposer { private EditTaskController editTaskController; - public ResourceAllocationController(){ - resourceAllocationModel = (IResourceAllocationModel) SpringUtil.getBean("resourceAllocationModel"); + public ResourceAllocationController() { + if ( resourceAllocationModel == null ) { + resourceAllocationModel = (IResourceAllocationModel) SpringUtil.getBean("resourceAllocationModel"); + } } @Override @@ -508,7 +510,6 @@ public class ResourceAllocationController extends GenericForwardComposer { private List plusAggregatingRow(List currentRows) { List result = new ArrayList<>(currentRows); result.add(null); - return result; } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java index 86c3cdadb..d2f466cf6 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/planner/consolidations/AdvanceConsolidationModel.java @@ -158,7 +158,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void createConsolidationIfNeeded() { if (consolidation == null && task != null) { if (advanceIsCalculated()) { - IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirecAdvanceAssignment(); + IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirectAdvanceAssignment(); consolidation = CalculatedConsolidation.create(task, indirectAdvanceAssignment); } else { consolidation = NonCalculatedConsolidation.create(task, spreadAdvance); @@ -167,7 +167,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { } } - private IndirectAdvanceAssignment getIndirecAdvanceAssignment() { + private IndirectAdvanceAssignment getIndirectAdvanceAssignment() { if (orderElement != null) { Set indirects = orderElement.getIndirectAdvanceAssignments(); for (IndirectAdvanceAssignment indirectAdvanceAssignment : indirects) { @@ -331,7 +331,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void removeConsolidationInAdvance() { if (advanceIsCalculated()) { - IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirecAdvanceAssignment(); + IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirectAdvanceAssignment(); indirectAdvanceAssignment.getCalculatedConsolidation().remove(consolidation); ((CalculatedConsolidation) consolidation).setIndirectAdvanceAssignment(null); } else { @@ -342,7 +342,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void addConsolidationInAdvance() { if (advanceIsCalculated()) { - IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirecAdvanceAssignment(); + IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirectAdvanceAssignment(); if (!indirectAdvanceAssignment.getCalculatedConsolidation().contains(consolidation)) { indirectAdvanceAssignment.getCalculatedConsolidation().add((CalculatedConsolidation) consolidation); ((CalculatedConsolidation) consolidation).setIndirectAdvanceAssignment(indirectAdvanceAssignment); @@ -368,7 +368,6 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void initTask(Task task) { this.task = task; taskElementDAO.reattach(this.task); - orderElement = task.getOrderElement(); orderElementDAO.reattach(orderElement); } @@ -387,7 +386,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void initAdvanceConsolidationsDTOs() { if (spreadAdvance != null) { - isUnitType = (!spreadAdvance.getAdvanceType().getPercentage()); + isUnitType = !spreadAdvance.getAdvanceType().getPercentage(); createAdvanceConsolidationDTOs(); initConsolidatedDates(); addNonConsolidatedAdvances(); @@ -398,7 +397,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private void initSpreadAdvance() { if (spreadAdvance != null) { if (advanceIsCalculated()) { - IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirecAdvanceAssignment(); + IndirectAdvanceAssignment indirectAdvanceAssignment = getIndirectAdvanceAssignment(); indirectAdvanceAssignment.getCalculatedConsolidation().size(); } else { spreadAdvance.getNonCalculatedConsolidation().size(); @@ -447,7 +446,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { private boolean canBeConsolidateAndShow(AdvanceMeasurement advanceMeasurement) { Date date = advanceMeasurement.getDate().toDateTimeAtStartOfDay().toDate(); - return ((AdvanceConsolidationDTO.canBeConsolidateAndShow(date)) && (!containsAdvance(advanceMeasurement))); + return AdvanceConsolidationDTO.canBeConsolidateAndShow(date) && !containsAdvance(advanceMeasurement); } @Override @@ -469,10 +468,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { } private List getAdvances() { - if (spreadAdvance != null) { - return new ArrayList<>(spreadAdvance.getAdvanceMeasurements()); - } - return new ArrayList<>(); + return spreadAdvance != null ? new ArrayList<>(spreadAdvance.getAdvanceMeasurements()) : new ArrayList<>(); } @Override @@ -490,10 +486,9 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { } public String infoMessages() { - if (getAdvances().size() > 0) { - return _("Progress cannot be consolidated."); - } - return _("There is not any assigned progress to current task"); + return getAdvances().size() > 0 + ? _("Progress cannot be consolidated.") + : _("There is not any assigned progress to current task"); } public void setConsolidationDTOs(List consolidationDTOs) { @@ -501,10 +496,7 @@ public class AdvanceConsolidationModel implements IAdvanceConsolidationModel { } public List getConsolidationDTOs() { - if (spreadAdvance != null && orderElement != null) { - return consolidationDTOs; - } - return new ArrayList<>(); + return spreadAdvance != null && orderElement != null ? consolidationDTOs : new ArrayList<>(); } private boolean hasResourceAllocation() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksModel.java index 2d5cbf718..2669e7e95 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/subcontract/SubcontractedTasksModel.java @@ -34,7 +34,6 @@ import javax.xml.bind.Marshaller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.cxf.jaxrs.client.WebClient; -import org.libreplan.business.common.daos.IConfigurationDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.externalcompanies.entities.ExternalCompany; import org.libreplan.business.orders.daos.IOrderDAO; @@ -89,9 +88,6 @@ public class SubcontractedTasksModel implements ISubcontractedTasksModel { @Autowired private IOrderDAO orderDAO; - @Autowired - private IConfigurationDAO configurationDAO; - @Override @Transactional(readOnly = true) public List getSubcontractedTasks() { diff --git a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/api/OrderElementWithAdvanceMeasurementsOrEndDateListDTO.java b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/api/OrderElementWithAdvanceMeasurementsOrEndDateListDTO.java index abc64c408..d0b6c5d97 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/api/OrderElementWithAdvanceMeasurementsOrEndDateListDTO.java +++ b/libreplan-webapp/src/main/java/org/libreplan/ws/subcontract/api/OrderElementWithAdvanceMeasurementsOrEndDateListDTO.java @@ -44,6 +44,10 @@ public class OrderElementWithAdvanceMeasurementsOrEndDateListDTO { @XmlElement(name = "order-element") public List orderElements = new ArrayList<>(); + /** Do not remove default constructor */ + public OrderElementWithAdvanceMeasurementsOrEndDateListDTO() { + } + public OrderElementWithAdvanceMeasurementsOrEndDateListDTO( String externalCompanyNif, List orderElements) { diff --git a/libreplan-webapp/src/main/resources/libreplan-webapp-spring-security-config.xml b/libreplan-webapp/src/main/resources/libreplan-webapp-spring-security-config.xml index 8658f7865..4ed7abab0 100644 --- a/libreplan-webapp/src/main/resources/libreplan-webapp-spring-security-config.xml +++ b/libreplan-webapp/src/main/resources/libreplan-webapp-spring-security-config.xml @@ -18,13 +18,13 @@ - - - - - - - + + + + + + + @@ -116,7 +116,7 @@ - + diff --git a/libreplan-webapp/src/main/webapp/common/layout/login.zul b/libreplan-webapp/src/main/webapp/common/layout/login.zul index ea94eb26e..558d51797 100644 --- a/libreplan-webapp/src/main/webapp/common/layout/login.zul +++ b/libreplan-webapp/src/main/webapp/common/layout/login.zul @@ -132,13 +132,13 @@ - + ${i18n:_('User disabled')} ]]> - + ${i18n:_('Incorrect authentication')} ]]> diff --git a/libreplan-webapp/src/main/webapp/email/email_templates.zul b/libreplan-webapp/src/main/webapp/email/email_templates.zul index 54adca619..75fabff0f 100644 --- a/libreplan-webapp/src/main/webapp/email/email_templates.zul +++ b/libreplan-webapp/src/main/webapp/email/email_templates.zul @@ -137,14 +137,6 @@ -