Merge pull request #65 from skylow95/master

Update libs
This commit is contained in:
Jeroen Baten 2016-04-25 21:33:13 +02:00
commit bdaff5bf5d
5 changed files with 186 additions and 229 deletions

View file

@ -38,8 +38,7 @@ import org.libreplan.business.common.daos.IJobSchedulerConfigurationDAO;
* *
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl> * @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
*/ */
public class JobSchedulerConfiguration extends BaseEntity implements public class JobSchedulerConfiguration extends BaseEntity implements IHumanIdentifiable {
IHumanIdentifiable {
public static JobSchedulerConfiguration create() { public static JobSchedulerConfiguration create() {
return create(new JobSchedulerConfiguration()); return create(new JobSchedulerConfiguration());
@ -122,18 +121,16 @@ public class JobSchedulerConfiguration extends BaseEntity implements
@AssertTrue(message = "job group and name are already being used") @AssertTrue(message = "job group and name are already being used")
public boolean isUniqueJobGroupAndNameConstraint() { public boolean isUniqueJobGroupAndNameConstraint() {
if (StringUtils.isBlank(jobGroup) && StringUtils.isBlank(jobName)) { if ( StringUtils.isBlank(jobGroup) && StringUtils.isBlank(jobName) ) {
return true; return true;
} }
IJobSchedulerConfigurationDAO jobSchedulerConfigurationDAO = Registry IJobSchedulerConfigurationDAO jobSchedulerConfigurationDAO = Registry.getJobSchedulerConfigurationDAO();
.getJobSchedulerConfigurationDAO(); if ( isNewObject() ) {
if (isNewObject()) { return !jobSchedulerConfigurationDAO.existsByJobGroupAndJobNameAnotherTransaction(this);
return !jobSchedulerConfigurationDAO
.existsByJobGroupAndJobNameAnotherTransaction(this);
} else { } else {
JobSchedulerConfiguration found = jobSchedulerConfigurationDAO JobSchedulerConfiguration found =
.findUniqueByJobGroupAndJobNameAnotherTransaction(jobGroup, jobSchedulerConfigurationDAO.findUniqueByJobGroupAndJobNameAnotherTransaction(jobGroup, jobName);
jobName);
return found == null || found.getId().equals(getId()); return found == null || found.getId().equals(getId());
} }
} }

View file

@ -39,11 +39,11 @@ public class SendEmailOnMilestoneReachedJob extends QuartzJobBean {
@Override @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException { protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
ApplicationContext applicationContext = (ApplicationContext) context.getJobDetail(). ApplicationContext applicationContext =
getJobDataMap().get("applicationContext"); (ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext");
IEmailNotificationJob milestoneReached = (SendEmailOnMilestoneReached) applicationContext IEmailNotificationJob milestoneReached =
.getBean("SendEmailOnMilestoneReached"); (SendEmailOnMilestoneReached) applicationContext.getBean("SendEmailOnMilestoneReached");
milestoneReached.sendEmail(); milestoneReached.sendEmail();
} }

View file

@ -138,8 +138,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
@Autowired @Autowired
private IAdHocTransactionService transactionService; private IAdHocTransactionService transactionService;
private static final org.apache.commons.logging.Log LOG = LogFactory private static final org.apache.commons.logging.Log LOG = LogFactory.getLog(OrderElementTreeController.class);
.getLog(OrderElementTreeController.class);
public List<org.libreplan.business.labels.entities.Label> getLabels() { public List<org.libreplan.business.labels.entities.Label> getLabels() {
return orderModel.getLabels(); return orderModel.getLabels();
@ -150,9 +149,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
return renderer; return renderer;
} }
public OrderElementTreeController(IOrderModel orderModel, public OrderElementTreeController(IOrderModel orderModel, OrderElementController orderElementController,
OrderElementController orderElementController, IMessagesForUser messagesForUser) {
IMessagesForUser messagesForUser) {
super(OrderElement.class); super(OrderElement.class);
this.orderModel = orderModel; this.orderModel = orderModel;
this.orderElementController = orderElementController; this.orderElementController = orderElementController;
@ -217,8 +215,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
new IOnResult<OrderElementTemplate>() { new IOnResult<OrderElementTemplate>() {
@Override @Override
public void found(OrderElementTemplate template) { public void found(OrderElementTemplate template) {
OrderLineGroup parent = (OrderLineGroup) getModel() OrderLineGroup parent = (OrderLineGroup) getModel().getRoot();
.getRoot();
orderModel.createFrom(parent, template); orderModel.createFrom(parent, template);
getModel().addNewlyAddedChildrenOf(parent); getModel().addNewlyAddedChildrenOf(parent);
@ -233,14 +230,14 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
tree.invalidate(); tree.invalidate();
} }
void doEditFor(Order order) { void doEditFor() {
Util.reloadBindings(tree); Util.reloadBindings(tree);
} }
public void disabledCodeBoxes(boolean disabled) { public void disabledCodeBoxes(boolean disabled) {
Set<Treeitem> childrenSet = new HashSet<Treeitem>(); Set<Treeitem> childrenSet = new HashSet<>();
Treechildren treeChildren = tree.getTreechildren(); Treechildren treeChildren = tree.getTreechildren();
if (treeChildren != null) { if ( treeChildren != null ) {
childrenSet.addAll((Collection<Treeitem>) treeChildren.getItems()); childrenSet.addAll((Collection<Treeitem>) treeChildren.getItems());
} }
for (Treeitem each : childrenSet) { for (Treeitem each : childrenSet) {
@ -250,14 +247,13 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private void disableCodeBoxes(Treeitem item, boolean disabled) { private void disableCodeBoxes(Treeitem item, boolean disabled) {
Treerow row = item.getTreerow(); Treerow row = item.getTreerow();
InputElement codeBox = (InputElement) ((Treecell) row.getChildren() InputElement codeBox = (InputElement) ((Treecell) row.getChildren().get(1)).getChildren().get(0);
.get(1)).getChildren().get(0);
codeBox.setDisabled(disabled); codeBox.setDisabled(disabled);
codeBox.invalidate(); codeBox.invalidate();
Set<Treeitem> childrenSet = new HashSet<Treeitem>(); Set<Treeitem> childrenSet = new HashSet<>();
Treechildren children = item.getTreechildren(); Treechildren children = item.getTreechildren();
if (children != null) { if ( children != null ) {
childrenSet.addAll((Collection<Treeitem>) children.getItems()); childrenSet.addAll((Collection<Treeitem>) children.getItems());
} }
@ -274,27 +270,20 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
// Configuration of the order elements filter // Configuration of the order elements filter
Component filterComponent = Executions.createComponents( Component filterComponent = Executions.createComponents(
"/orders/_orderElementTreeFilter.zul", orderElementFilter, "/orders/_orderElementTreeFilter.zul",
orderElementFilter,
new HashMap<String, String>()); new HashMap<String, String>());
filterComponent.setVariable("treeController", this, true); filterComponent.setVariable("treeController", this, true);
bdFiltersOrderElement = (BandboxMultipleSearch) filterComponent bdFiltersOrderElement = (BandboxMultipleSearch) filterComponent.getFellow("bdFiltersOrderElement");
.getFellow("bdFiltersOrderElement"); filterOptionsPopup = (Popup) filterComponent.getFellow("filterOptionsPopup");
filterOptionsPopup = (Popup) filterComponent filterStartDateOrderElement = (Datebox) filterOptionsPopup.getFellow("filterStartDateOrderElement");
.getFellow("filterOptionsPopup"); filterFinishDateOrderElement = (Datebox) filterOptionsPopup.getFellow("filterFinishDateOrderElement");
filterStartDateOrderElement = (Datebox) filterOptionsPopup labelsWithoutInheritance = (Checkbox) filterOptionsPopup.getFellow("labelsWithoutInheritance");
.getFellow("filterStartDateOrderElement"); filterNameOrderElement = (Textbox) filterComponent.getFellow("filterNameOrderElement");
filterFinishDateOrderElement = (Datebox) filterOptionsPopup labelsWithoutInheritance = (Checkbox) filterComponent.getFellow("labelsWithoutInheritance");
.getFellow("filterFinishDateOrderElement"); templateFinderPopup = (TemplateFinderPopup) comp.getFellow("templateFinderPopupAtTree");
labelsWithoutInheritance = (Checkbox) filterOptionsPopup operationsForOrderElement.tree(tree).orderTemplates(this.orderTemplates);
.getFellow("labelsWithoutInheritance");
filterNameOrderElement = (Textbox) filterComponent
.getFellow("filterNameOrderElement");
labelsWithoutInheritance = (Checkbox) filterComponent
.getFellow("labelsWithoutInheritance");
templateFinderPopup = (TemplateFinderPopup) comp
.getFellow("templateFinderPopupAtTree");
operationsForOrderElement.tree(tree)
.orderTemplates(this.orderTemplates);
importOrderFiltersFromSession(); importOrderFiltersFromSession();
disableCreateTemplateButtonIfNeeded(comp); disableCreateTemplateButtonIfNeeded(comp);
@ -302,35 +291,29 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private void importOrderFiltersFromSession() { private void importOrderFiltersFromSession() {
Order order = orderModel.getOrder(); Order order = orderModel.getOrder();
filterNameOrderElement.setValue(FilterUtils filterNameOrderElement.setValue(FilterUtils.readOrderTaskName(order));
.readOrderTaskName(order)); filterStartDateOrderElement.setValue(FilterUtils.readOrderStartDate(order));
filterStartDateOrderElement.setValue(FilterUtils filterFinishDateOrderElement.setValue(FilterUtils.readOrderEndDate(order));
.readOrderStartDate(order)); if ( FilterUtils.readOrderParameters(order) != null ) {
filterFinishDateOrderElement.setValue(FilterUtils for (FilterPair each : FilterUtils.readOrderParameters(order)) {
.readOrderEndDate(order)); if ( toOrderFilterEnum(each) != null ) {
if (FilterUtils.readOrderParameters(order) != null) { bdFiltersOrderElement.addSelectedElement(toOrderFilterEnum(each));
for (FilterPair each : (List<FilterPair>) FilterUtils
.readOrderParameters(order)) {
if (toOrderFilterEnum(each) != null) {
bdFiltersOrderElement
.addSelectedElement(toOrderFilterEnum(each));
} }
} }
} }
if (FilterUtils.readOrderInheritance(order) != null) { if ( FilterUtils.readOrderInheritance(order) != null ) {
labelsWithoutInheritance.setChecked(FilterUtils labelsWithoutInheritance.setChecked(FilterUtils.readOrderInheritance(order));
.readOrderInheritance(order));
} }
} }
private FilterPair toOrderFilterEnum(FilterPair each) { private FilterPair toOrderFilterEnum(FilterPair each) {
switch ((TaskElementFilterEnum) each.getType()) { switch ((TaskElementFilterEnum) each.getType()) {
case Label: case Label:
return new FilterPair(OrderElementFilterEnum.Label, return new FilterPair(OrderElementFilterEnum.Label, each.getPattern(), each.getValue());
each.getPattern(), each.getValue());
case Criterion: case Criterion:
return new FilterPair(OrderElementFilterEnum.Criterion, return new FilterPair(OrderElementFilterEnum.Criterion, each.getPattern(), each.getValue());
each.getPattern(), each.getValue());
case Resource: case Resource:
// Resources are discarded on WBS filter // Resources are discarded on WBS filter
} }
@ -338,14 +321,11 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
private void disableCreateTemplateButtonIfNeeded(Component comp) { private void disableCreateTemplateButtonIfNeeded(Component comp) {
Button createTemplateButton = (Button) comp Button createTemplateButton = (Button) comp.getFellowIfAny("createTemplateButton");
.getFellowIfAny("createTemplateButton"); if ( createTemplateButton != null ) {
if (createTemplateButton != null) { if ( !SecurityUtils.isSuperuserOrUserInRoles(UserRole.ROLE_TEMPLATES) ) {
if (!SecurityUtils
.isSuperuserOrUserInRoles(UserRole.ROLE_TEMPLATES)) {
createTemplateButton.setDisabled(true); createTemplateButton.setDisabled(true);
createTemplateButton createTemplateButton.setTooltiptext(_("Not enough permissions to create templates"));
.setTooltiptext(_("Not enough permissions to create templates"));
} }
} }
} }
@ -355,8 +335,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
// Is already added? // Is already added?
Button button = (Button) ComponentsFinder.findById("expandAllButton", children); Button button = (Button) ComponentsFinder.findById("expandAllButton", children);
if (button != null) { if ( button != null ) {
if (button.getSclass().equals("planner-command clicked")) { if ( button.getSclass().equals("planner-command clicked") ) {
button.setSclass("planner-command"); button.setSclass("planner-command");
button.invalidate(); button.invalidate();
} }
@ -372,7 +352,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
expandAllButton.addEventListener("onClick", new EventListener() { expandAllButton.addEventListener("onClick", new EventListener() {
@Override @Override
public void onEvent(Event event) { public void onEvent(Event event) {
if (expandAllButton.getSclass().equals("planner-command")) { if ( expandAllButton.getSclass().equals("planner-command") ) {
expandAll(); expandAll();
expandAllButton.setSclass("planner-command clicked"); expandAllButton.setSclass("planner-command clicked");
} else { } else {
@ -385,12 +365,12 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
public void expandAll() { public void expandAll() {
Set<Treeitem> childrenSet = new HashSet<Treeitem>(); Set<Treeitem> childrenSet = new HashSet<>();
Treechildren children = tree.getTreechildren(); Treechildren children = tree.getTreechildren();
if(children != null) { if ( children != null ) {
childrenSet.addAll((Collection<Treeitem>) children.getItems()); childrenSet.addAll((Collection<Treeitem>) children.getItems());
} }
for(Treeitem each: childrenSet) { for (Treeitem each: childrenSet) {
expandAll(each); expandAll(each);
} }
} }
@ -398,20 +378,20 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private void expandAll(Treeitem item) { private void expandAll(Treeitem item) {
item.setOpen(true); item.setOpen(true);
Set<Treeitem> childrenSet = new HashSet<Treeitem>(); Set<Treeitem> childrenSet = new HashSet<>();
Treechildren children = item.getTreechildren(); Treechildren children = item.getTreechildren();
if(children != null) { if ( children != null ) {
childrenSet.addAll((Collection<Treeitem>) children.getItems()); childrenSet.addAll((Collection<Treeitem>) children.getItems());
} }
for(Treeitem each: childrenSet) { for (Treeitem each: childrenSet) {
expandAll(each); expandAll(each);
} }
} }
public void collapseAll() { public void collapseAll() {
Treechildren children = tree.getTreechildren(); Treechildren children = tree.getTreechildren();
for(Treeitem each: (Collection<Treeitem>) children.getItems()) { for (Treeitem each: (Collection<Treeitem>) children.getItems()) {
each.setOpen(false); each.setOpen(false);
} }
} }
@ -448,7 +428,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
orderElementForThisRow.setName(value); orderElementForThisRow.setName(value);
} }
}); });
if (readOnly) {
if ( readOnly ) {
textBox.setDisabled(true); textBox.setDisabled(true);
} }
textBox.setConstraint("no empty:" + _("cannot be empty")); textBox.setConstraint("no empty:" + _("cannot be empty"));
@ -457,23 +438,20 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
@Override @Override
protected SchedulingState getSchedulingStateFrom( protected SchedulingState getSchedulingStateFrom(OrderElement currentElement) {
OrderElement currentElement) {
return currentElement.getSchedulingState(); return currentElement.getSchedulingState();
} }
@Override @Override
protected void onDoubleClickForSchedulingStateCell( protected void onDoubleClickForSchedulingStateCell(final OrderElement currentOrderElement) {
final OrderElement currentOrderElement) { IOrderElementModel model = orderModel.getOrderElementModel(currentOrderElement);
IOrderElementModel model = orderModel
.getOrderElementModel(currentOrderElement);
orderElementController.openWindow(model); orderElementController.openWindow(model);
updateColumnsFor(currentOrderElement); updateColumnsFor(currentOrderElement);
} }
@Override @Override
protected void addCodeCell(final OrderElement orderElement) { protected void addCodeCell(final OrderElement orderElement) {
if (orderElement.isJiraIssue()) { if ( orderElement.isJiraIssue() ) {
addHyperlink(orderElement); addHyperlink(orderElement);
} else { } else {
addTextbox(orderElement); addTextbox(orderElement);
@ -482,6 +460,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private void addTextbox(final OrderElement orderElement) { private void addTextbox(final OrderElement orderElement) {
Textbox textBoxCode = new Textbox(); Textbox textBoxCode = new Textbox();
Util.bind(textBoxCode, new Util.Getter<String>() { Util.bind(textBoxCode, new Util.Getter<String>() {
@Override @Override
public String get() { public String get() {
@ -494,19 +473,19 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
orderElement.setCode(value); orderElement.setCode(value);
} }
}); });
textBoxCode.setConstraint(new Constraint() { textBoxCode.setConstraint(new Constraint() {
@Override @Override
public void validate(Component comp, Object value) public void validate(Component comp, Object value) throws WrongValueException {
throws WrongValueException { if ( !orderElement.isFormatCodeValid((String) value) ) {
if (!orderElement.isFormatCodeValid((String) value)) { throw new WrongValueException(comp,
throw new WrongValueException( _("Value is not valid.\n Code cannot contain chars like '_' \n " +
comp, "and should not be empty"));
_("Value is not valid.\n Code cannot contain chars like '_' \n and should not be empty"));
} }
} }
}); });
if (orderModel.isCodeAutogenerated() || readOnly) { if ( orderModel.isCodeAutogenerated() || readOnly ) {
textBoxCode.setDisabled(true); textBoxCode.setDisabled(true);
} }
@ -518,24 +497,21 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
String code = orderElement.getCode(); String code = orderElement.getCode();
A hyperlink = new A(code); A hyperlink = new A(code);
Connector connector = connectorDAO Connector connector = connectorDAO.findUniqueByName(PredefinedConnectors.JIRA.getName());
.findUniqueByName(PredefinedConnectors.JIRA.getName()); if ( connector == null ) {
if (connector == null) {
return; return;
} }
String jiraUrl = connector.getPropertiesAsMap().get( String jiraUrl = connector.getPropertiesAsMap().get(PredefinedConnectorProperties.SERVER_URL);
PredefinedConnectorProperties.SERVER_URL);
String codeWithoutPrefix = StringUtils.removeStart(code, PredefinedConnectorProperties.JIRA_CODE_PREFIX);
String codeWithoutPrefix = StringUtils.removeStart(code,
PredefinedConnectorProperties.JIRA_CODE_PREFIX);
codeWithoutPrefix = StringUtils.removeStart(codeWithoutPrefix, codeWithoutPrefix = StringUtils.removeStart(codeWithoutPrefix,
orderElement.getOrder().getCode() orderElement.getOrder().getCode() + EntitySequence.CODE_SEPARATOR_CHILDREN);
+ EntitySequence.CODE_SEPARATOR_CHILDREN);
hyperlink.setHref(jiraUrl + "/browse/" + codeWithoutPrefix); hyperlink.setHref(jiraUrl + "/browse/" + codeWithoutPrefix);
if (orderModel.isCodeAutogenerated() || readOnly) { if ( orderModel.isCodeAutogenerated() || readOnly ) {
hyperlink.setDisabled(true); hyperlink.setDisabled(true);
} }
@ -558,7 +534,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
}); });
if (readOnly) {
if ( readOnly ) {
dinamicDatebox.setDisabled(true); dinamicDatebox.setDisabled(true);
} }
addDateCell(dinamicDatebox, _("init")); addDateCell(dinamicDatebox, _("init"));
@ -580,9 +557,11 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
currentOrderElement.setDeadline(value); currentOrderElement.setDeadline(value);
} }
}); });
if (readOnly
|| (currentOrderElement.getTaskSource() != null && currentOrderElement if ( readOnly ||
.getTaskSource().getTask().isSubcontracted())) { (currentOrderElement.getTaskSource() != null &&
currentOrderElement.getTaskSource().getTask().isSubcontracted()) ) {
dinamicDatebox.setDisabled(true); dinamicDatebox.setDisabled(true);
} }
addDateCell(dinamicDatebox, _("end")); addDateCell(dinamicDatebox, _("end"));
@ -590,14 +569,11 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
@Override @Override
protected void addOperationsCell(final Treeitem item, protected void addOperationsCell(final Treeitem item, final OrderElement currentOrderElement) {
final OrderElement currentOrderElement) { addCell(createEditButton(item), createRemoveButton(currentOrderElement));
addCell(createEditButton(currentOrderElement, item),
createRemoveButton(currentOrderElement));
} }
private Button createEditButton(final OrderElement currentOrderElement, private Button createEditButton(final Treeitem item) {
final Treeitem item) {
Button editbutton = createButton("/common/img/ico_editar1.png", Button editbutton = createButton("/common/img/ico_editar1.png",
_("Edit"), "/common/img/ico_editar.png", "icono", _("Edit"), "/common/img/ico_editar.png", "icono",
new EventListener() { new EventListener() {
@ -606,6 +582,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
showEditionOrderElement(item); showEditionOrderElement(item);
} }
}); });
return editbutton; return editbutton;
} }
@ -625,8 +602,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
@Override @Override
protected boolean isPredicateApplied() { protected boolean isPredicateApplied() {
return (predicate != null) return (predicate != null) && !((OrderElementPredicate) predicate).isEmpty();
&& !((OrderElementPredicate) predicate).isEmpty();
} }
/** /**
@ -637,7 +613,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
OrderElementPredicate predicate = createPredicate(); OrderElementPredicate predicate = createPredicate();
this.predicate = predicate; this.predicate = predicate;
if (predicate != null) { if ( predicate != null ) {
filterByPredicate(predicate); filterByPredicate(predicate);
} else { } else {
showAllOrderElements(); showAllOrderElements();
@ -646,18 +622,13 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private void writeFilterParameters() { private void writeFilterParameters() {
Order order = orderModel.getOrder(); Order order = orderModel.getOrder();
FilterUtils.writeOrderStartDate(order, FilterUtils.writeOrderStartDate(order, filterStartDateOrderElement.getValue());
filterStartDateOrderElement.getValue()); FilterUtils.writeOrderEndDate(order, filterFinishDateOrderElement.getValue());
FilterUtils.writeOrderEndDate(order, FilterUtils.writeOrderTaskName(order, filterNameOrderElement.getValue());
filterFinishDateOrderElement.getValue()); FilterUtils.writeOrderInheritance(order, labelsWithoutInheritance.isChecked());
FilterUtils List<FilterPair> result = new ArrayList<>();
.writeOrderTaskName(order,
filterNameOrderElement.getValue()); for (FilterPair filterPair : (List<FilterPair>) bdFiltersOrderElement.getSelectedElements()) {
FilterUtils.writeOrderInheritance(order,
labelsWithoutInheritance.isChecked());
List<FilterPair> result = new ArrayList<FilterPair>();
for (FilterPair filterPair : (List<FilterPair>) bdFiltersOrderElement
.getSelectedElements()) {
result.add(toTasKElementFilterEnum(filterPair)); result.add(toTasKElementFilterEnum(filterPair));
} }
FilterUtils.writeOrderParameters(order, result); FilterUtils.writeOrderParameters(order, result);
@ -667,49 +638,44 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
private FilterPair toTasKElementFilterEnum(FilterPair each) { private FilterPair toTasKElementFilterEnum(FilterPair each) {
switch ((OrderElementFilterEnum) each.getType()) { switch ((OrderElementFilterEnum) each.getType()) {
case Label: case Label:
return new FilterPair(TaskElementFilterEnum.Label, return new FilterPair(TaskElementFilterEnum.Label, each.getPattern(), each.getValue());
each.getPattern(), each.getValue());
case Criterion: case Criterion:
return new FilterPair(TaskElementFilterEnum.Criterion, return new FilterPair(TaskElementFilterEnum.Criterion, each.getPattern(), each.getValue());
each.getPattern(), each.getValue());
} }
return null; return null;
} }
private OrderElementPredicate createPredicate() { private OrderElementPredicate createPredicate() {
List<FilterPair> listFilters = (List<FilterPair>) bdFiltersOrderElement List<FilterPair> listFilters = (List<FilterPair>) bdFiltersOrderElement.getSelectedElements();
.getSelectedElements();
Date startDate = filterStartDateOrderElement.getValue(); Date startDate = filterStartDateOrderElement.getValue();
Date finishDate = filterFinishDateOrderElement.getValue(); Date finishDate = filterFinishDateOrderElement.getValue();
boolean ignoreLabelsInheritance = Boolean boolean ignoreLabelsInheritance = Boolean.valueOf(labelsWithoutInheritance.isChecked());
.valueOf(labelsWithoutInheritance.isChecked());
String name = filterNameOrderElement.getValue(); String name = filterNameOrderElement.getValue();
if (listFilters.isEmpty() && startDate == null && finishDate == null if ( listFilters.isEmpty() && startDate == null && finishDate == null && name == null ) {
&& name == null) {
return null; return null;
} }
return new OrderElementPredicate(listFilters, startDate, finishDate, return new OrderElementPredicate(listFilters, startDate, finishDate, name, ignoreLabelsInheritance);
name, ignoreLabelsInheritance);
} }
public TreeModel getFilteredTreeModel() { public TreeModel getFilteredTreeModel() {
OrderElementTreeModel filteredModel = getFilteredModel(); OrderElementTreeModel filteredModel = getFilteredModel();
if (filteredModel == null) { if ( filteredModel == null ) {
return null; return null;
} }
return filteredModel.asTree(); return filteredModel.asTree();
} }
public OrderElementTreeModel getFilteredModel() { public OrderElementTreeModel getFilteredModel() {
if (orderModel == null) { if ( orderModel == null ) {
return null; return null;
} }
OrderElementPredicate predicate = createPredicate(); OrderElementPredicate predicate = createPredicate();
this.predicate = predicate; this.predicate = predicate;
if (predicate != null) { if ( predicate != null ) {
return orderModel.getOrderElementsFilteredByPredicate(predicate); return orderModel.getOrderElementsFilteredByPredicate(predicate);
} else { } else {
return orderModel.getOrderElementTreeModel(); return orderModel.getOrderElementTreeModel();
@ -717,8 +683,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
private void filterByPredicate(OrderElementPredicate predicate) { private void filterByPredicate(OrderElementPredicate predicate) {
OrderElementTreeModel orderElementTreeModel = orderModel OrderElementTreeModel orderElementTreeModel = orderModel.getOrderElementsFilteredByPredicate(predicate);
.getOrderElementsFilteredByPredicate(predicate);
tree.setModel(orderElementTreeModel.asTree()); tree.setModel(orderElementTreeModel.asTree());
tree.invalidate(); tree.invalidate();
} }
@ -756,25 +721,29 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
protected String createTooltipText(OrderElement elem) { protected String createTooltipText(OrderElement elem) {
StringBuilder tooltipText = new StringBuilder(); StringBuilder tooltipText = new StringBuilder();
tooltipText.append(elem.getName() + ". "); tooltipText.append(elem.getName() + ". ");
if ((elem.getDescription() != null)
&& (!elem.getDescription().equals(""))) { if ( (elem.getDescription() != null) && (!elem.getDescription().equals("")) ) {
tooltipText.append(elem.getDescription()); tooltipText.append(elem.getDescription());
tooltipText.append(". "); tooltipText.append(". ");
} }
if ((elem.getLabels() != null) && (!elem.getLabels().isEmpty())) {
if ( (elem.getLabels() != null) && (!elem.getLabels().isEmpty()) ) {
tooltipText.append(" " + _("Labels") + ":"); tooltipText.append(" " + _("Labels") + ":");
tooltipText.append(StringUtils.join(elem.getLabels(), ",")); tooltipText.append(StringUtils.join(elem.getLabels(), ","));
tooltipText.append("."); tooltipText.append(".");
} }
if ((elem.getCriterionRequirements() != null)
&& (!elem.getCriterionRequirements().isEmpty())) { if ( (elem.getCriterionRequirements() != null) && (!elem.getCriterionRequirements().isEmpty()) ) {
ArrayList<String> criterionNames = new ArrayList<String>(); ArrayList<String> criterionNames = new ArrayList<>();
for(CriterionRequirement each:elem.getCriterionRequirements()) { for(CriterionRequirement each:elem.getCriterionRequirements()) {
if (each.isValid()) {
if ( each.isValid() ) {
criterionNames.add(each.getCriterion().getName()); criterionNames.add(each.getCriterion().getName());
} }
} }
if (!criterionNames.isEmpty()) {
if ( !criterionNames.isEmpty() ) {
tooltipText.append(" " + _("Criteria") + ":"); tooltipText.append(" " + _("Criteria") + ":");
tooltipText.append(StringUtils.join(criterionNames, ",")); tooltipText.append(StringUtils.join(criterionNames, ","));
tooltipText.append("."); tooltipText.append(".");
@ -792,8 +761,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
public void showEditionOrderElement(final Treeitem item) { public void showEditionOrderElement(final Treeitem item) {
OrderElement currentOrderElement = (OrderElement) item.getValue(); OrderElement currentOrderElement = (OrderElement) item.getValue();
markModifiedTreeitem(item.getTreerow()); markModifiedTreeitem(item.getTreerow());
IOrderElementModel model = orderModel IOrderElementModel model = orderModel.getOrderElementModel(currentOrderElement);
.getOrderElementModel(currentOrderElement);
orderElementController.openWindow(model); orderElementController.openWindow(model);
refreshRow(item); refreshRow(item);
} }
@ -808,10 +776,10 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
public Treeitem getTreeitemByOrderElement(OrderElement element) { public Treeitem getTreeitemByOrderElement(OrderElement element) {
List<Treeitem> listItems = new ArrayList<Treeitem>(this.tree.getItems()); List<Treeitem> listItems = new ArrayList<>(this.tree.getItems());
for (Treeitem item : listItems) { for (Treeitem item : listItems) {
OrderElement orderElement = (OrderElement) item.getValue(); OrderElement orderElement = (OrderElement) item.getValue();
if (orderElement.getId().equals(element.getId())) { if ( orderElement.getId().equals(element.getId()) ) {
return item; return item;
} }
} }
@ -824,16 +792,15 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
public Constraint checkConstraintFinishDate() { public Constraint checkConstraintFinishDate() {
return new Constraint() { return new Constraint() {
@Override @Override
public void validate(Component comp, Object value) public void validate(Component comp, Object value) throws WrongValueException {
throws WrongValueException {
Date finishDate = (Date) value; Date finishDate = (Date) value;
if ((finishDate != null)
&& (filterStartDateOrderElement.getValue() != null) if ( (finishDate != null) &&
&& (finishDate.compareTo(filterStartDateOrderElement (filterStartDateOrderElement.getValue() != null) &&
.getValue()) < 0)) { (finishDate.compareTo(filterStartDateOrderElement.getValue()) < 0) ) {
filterFinishDateOrderElement.setValue(null); filterFinishDateOrderElement.setValue(null);
throw new WrongValueException(comp, throw new WrongValueException(comp, _("must be after start date"));
_("must be after start date"));
} }
} }
}; };
@ -842,16 +809,15 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
public Constraint checkConstraintStartDate() { public Constraint checkConstraintStartDate() {
return new Constraint() { return new Constraint() {
@Override @Override
public void validate(Component comp, Object value) public void validate(Component comp, Object value) throws WrongValueException {
throws WrongValueException {
Date startDate = (Date) value; Date startDate = (Date) value;
if ((startDate != null)
&& (filterFinishDateOrderElement.getValue() != null) if ( (startDate != null) &&
&& (startDate.compareTo(filterFinishDateOrderElement (filterFinishDateOrderElement.getValue() != null) &&
.getValue()) > 0)) { (startDate.compareTo(filterFinishDateOrderElement.getValue()) > 0) ) {
filterStartDateOrderElement.setValue(null); filterStartDateOrderElement.setValue(null);
throw new WrongValueException(comp, throw new WrongValueException(comp, _("must be lower than end date"));
_("must be lower than end date"));
} }
} }
}; };
@ -859,33 +825,27 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
@Override @Override
public void remove(OrderElement element) { public void remove(OrderElement element) {
boolean hasImputedExpenseSheets = orderModel boolean hasImputedExpenseSheets = orderModel.hasImputedExpenseSheetsThisOrAnyOfItsChildren(element);
.hasImputedExpenseSheetsThisOrAnyOfItsChildren(element); if ( hasImputedExpenseSheets ) {
if (hasImputedExpenseSheets) { messagesForUser.showMessage(Level.ERROR,
messagesForUser _("You can not remove the project \"{0}\" because this one has imputed expense sheets.",
.showMessage( element.getName()));
Level.ERROR,
_("You can not remove the project \"{0}\" because this one has imputed expense sheets.",
element.getName()));
return; return;
} }
boolean alreadyInUse = orderModel.isAlreadyInUse(element); boolean alreadyInUse = orderModel.isAlreadyInUse(element);
if (alreadyInUse) { if ( alreadyInUse ) {
messagesForUser messagesForUser.showMessage(Level.ERROR,
.showMessage(
Level.ERROR,
_("You cannot remove the task \"{0}\" because it has work reported on it or any of its children", _("You cannot remove the task \"{0}\" because it has work reported on it or any of its children",
element.getName())); element.getName()));
return; return;
} }
boolean onlyChildAndParentAlreadyInUseByHoursOrExpenses = orderModel boolean onlyChildAndParentAlreadyInUseByHoursOrExpenses =
.isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(element); orderModel.isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(element);
if (onlyChildAndParentAlreadyInUseByHoursOrExpenses) {
messagesForUser if ( onlyChildAndParentAlreadyInUseByHoursOrExpenses ) {
.showMessage( messagesForUser.showMessage(Level.ERROR,
Level.ERROR,
_("You cannot remove the task \"{0}\" because it is the only child of its parent and its parent has tracked time or imputed expenses", _("You cannot remove the task \"{0}\" because it is the only child of its parent and its parent has tracked time or imputed expenses",
element.getName())); element.getName()));
return; return;
@ -916,7 +876,7 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
@Override @Override
public void setWorkHours(OrderElement element, Integer value) { public void setWorkHours(OrderElement element, Integer value) {
if (element instanceof OrderLine) { if ( element instanceof OrderLine ) {
OrderLine line = (OrderLine) element; OrderLine line = (OrderLine) element;
line.setWorkHours(value); line.setWorkHours(value);
} }
@ -934,9 +894,8 @@ public class OrderElementTreeController extends TreeController<OrderElement> {
} }
@Override @Override
public void setBudgetHours(OrderElement element, public void setBudgetHours(OrderElement element, BigDecimal budget) {
BigDecimal budget) { if ( element instanceof OrderLine ) {
if (element instanceof OrderLine) {
OrderLine line = (OrderLine) element; OrderLine line = (OrderLine) element;
line.setBudget(budget); line.setBudget(budget);
} }

View file

@ -28,7 +28,6 @@ import static org.libreplan.web.test.WebappGlobalNames.WEBAPP_SPRING_CONFIG_TEST
import static org.libreplan.web.test.WebappGlobalNames.WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE; import static org.libreplan.web.test.WebappGlobalNames.WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.Properties; import java.util.Properties;
@ -62,8 +61,12 @@ import org.springframework.transaction.annotation.Transactional;
* @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl> * @author Miciele Ghiorghis <m.ghiorghis@antoniusziekenhuis.nl>
*/ */
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { BUSINESS_SPRING_CONFIG_FILE, @ContextConfiguration(locations = {
WEBAPP_SPRING_CONFIG_FILE, WEBAPP_SPRING_CONFIG_TEST_FILE, BUSINESS_SPRING_CONFIG_FILE,
WEBAPP_SPRING_CONFIG_FILE,
WEBAPP_SPRING_CONFIG_TEST_FILE,
WEBAPP_SPRING_SECURITY_CONFIG_FILE, WEBAPP_SPRING_SECURITY_CONFIG_FILE,
WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE }) WEBAPP_SPRING_SECURITY_CONFIG_TEST_FILE })
public class ExportTimesheetsToTimTest { public class ExportTimesheetsToTimTest {
@ -74,7 +77,7 @@ public class ExportTimesheetsToTimTest {
IExportTimesheetsToTim exportTimesheetsToTim; IExportTimesheetsToTim exportTimesheetsToTim;
@Before @Before
public void loadProperties() throws FileNotFoundException, IOException { public void loadProperties() throws IOException {
String filename = System.getProperty("user.dir") + "/../scripts/tim-connector/tim-conn.properties"; String filename = System.getProperty("user.dir") + "/../scripts/tim-connector/tim-conn.properties";
properties = new Properties(); properties = new Properties();
properties.load(new FileInputStream(filename)); properties.load(new FileInputStream(filename));
@ -119,8 +122,7 @@ public class ExportTimesheetsToTimTest {
} }
private Order givenOrder() { private Order givenOrder() {
return transactionService return transactionService.runOnAnotherTransaction(new IOnTransaction<Order>() {
.runOnAnotherTransaction(new IOnTransaction<Order>() {
@Override @Override
public Order execute() { public Order execute() {
return givenValidOrderAlreadyStored(); return givenValidOrderAlreadyStored();
@ -133,8 +135,7 @@ public class ExportTimesheetsToTimTest {
order.setCode(UUID.randomUUID().toString()); order.setCode(UUID.randomUUID().toString());
order.setName("Order name " + UUID.randomUUID()); order.setName("Order name " + UUID.randomUUID());
order.setInitDate(new Date()); order.setInitDate(new Date());
order.setCalendar(configurationDAO.getConfiguration() order.setCalendar(configurationDAO.getConfiguration().getDefaultCalendar());
.getDefaultCalendar());
OrderVersion version = setupVersionUsing(scenarioManager, order); OrderVersion version = setupVersionUsing(scenarioManager, order);
order.useSchedulingDataFor(version); order.useSchedulingDataFor(version);
@ -147,8 +148,7 @@ public class ExportTimesheetsToTimTest {
} }
} }
private OrderVersion setupVersionUsing(IScenarioManager scenarioManager, private OrderVersion setupVersionUsing(IScenarioManager scenarioManager, Order order) {
Order order) {
Scenario current = scenarioManager.getCurrent(); Scenario current = scenarioManager.getCurrent();
OrderVersion result = OrderVersion.createInitialVersion(current); OrderVersion result = OrderVersion.createInitialVersion(current);
order.setVersionForScenario(current, result); order.setVersionForScenario(current, result);

37
pom.xml
View file

@ -84,8 +84,8 @@
<libreplan.mode>dev</libreplan.mode> <libreplan.mode>dev</libreplan.mode>
<!-- Hibernate properties --> <!-- Hibernate properties -->
<hibernate.show_sql>false</hibernate.show_sql> <hibernate.show_sql>false</hibernate.show_sql>
<hibernate.format_sql>true</hibernate.format_sql> <hibernate.format_sql>false</hibernate.format_sql>
<hibernate.use_sql_comments>true</hibernate.use_sql_comments> <hibernate.use_sql_comments>false</hibernate.use_sql_comments>
<hibernate.hbm2ddl.auto>validate</hibernate.hbm2ddl.auto> <hibernate.hbm2ddl.auto>validate</hibernate.hbm2ddl.auto>
<!-- Enable example users (wsreader, wswriter, wssubcontracting, <!-- Enable example users (wsreader, wswriter, wssubcontracting,
@ -376,7 +376,7 @@
<version>2.2.3</version> <version>2.2.3</version>
<classifier>jdk15</classifier> <classifier>jdk15</classifier>
</dependency> </dependency>
<dependency> <dependency>
<groupId>commons-collections</groupId> <groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId> <artifactId>commons-collections</artifactId>
<version>3.2</version> <version>3.2</version>
@ -614,7 +614,7 @@
<dependency> <dependency>
<groupId>net.sf.mpxj</groupId> <groupId>net.sf.mpxj</groupId>
<artifactId>mpxj</artifactId> <artifactId>mpxj</artifactId>
<version>5.2.1</version> <version>5.2.2</version>
</dependency> </dependency>
<!-- ZK fileupload --> <!-- ZK fileupload -->
@ -742,9 +742,9 @@
<!-- =========================================================== --> <!-- =========================================================== -->
<!-- Gettext configuration --> <!-- Gettext configuration -->
<plugin> <plugin>
<groupId>org.xnap.commons</groupId> <groupId>com.googlecode.gettext-commons</groupId>
<artifactId>maven-gettext-plugin</artifactId> <artifactId>gettext-maven-plugin</artifactId>
<version>1.2.0</version> <version>1.2.4</version>
<configuration> <configuration>
<targetBundle>i18n.Messages</targetBundle> <targetBundle>i18n.Messages</targetBundle>
</configuration> </configuration>
@ -755,11 +755,11 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version> <version>3.5.1</version>
<configuration> <configuration>
<verbose>true</verbose> <verbose>true</verbose>
<source>1.6</source> <source>1.7</source>
<target>1.6</target> <target>1.7</target>
<encoding>UTF-8</encoding> <encoding>UTF-8</encoding>
</configuration> </configuration>
</plugin> </plugin>
@ -778,7 +778,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId> <artifactId>maven-war-plugin</artifactId>
<version>2.2</version> <version>2.6</version>
<configuration> <configuration>
<webResources> <webResources>
<resource> <resource>
@ -796,7 +796,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version> <version>2.19.1</version>
<configuration> <configuration>
<runOrder>alphabetical</runOrder> <runOrder>alphabetical</runOrder>
</configuration> </configuration>
@ -843,24 +843,24 @@
<dependency> <dependency>
<groupId>com.jolbox</groupId> <groupId>com.jolbox</groupId>
<artifactId>bonecp</artifactId> <artifactId>bonecp</artifactId>
<version>0.7.1.RELEASE</version> <version>0.8.0.RELEASE</version>
</dependency> </dependency>
<!-- connection pooling dependencies --> <!-- connection pooling dependencies -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>1.5.5</version> <version>1.7.21</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId> <artifactId>slf4j-simple</artifactId>
<version>1.5.5</version> <version>1.7.21</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>14.0.1</version> <version>19.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
</plugin> </plugin>
@ -882,13 +882,14 @@
<plugin> <plugin>
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId> <artifactId>cobertura-maven-plugin</artifactId>
<version>2.4</version> <version>2.7</version>
<configuration> <configuration>
<formats> <formats>
<format>xml</format> <format>xml</format>
<format>html</format> <format>html</format>
</formats> </formats>
<maxmem>512M</maxmem> <maxmem>512M</maxmem>
<check/>
</configuration> </configuration>
</plugin> </plugin>
@ -897,7 +898,7 @@
<plugin> <plugin>
<groupId>org.liquibase</groupId> <groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId> <artifactId>liquibase-maven-plugin</artifactId>
<version>2.0.5</version> <version>3.5.0</version>
</plugin> </plugin>
</plugins> </plugins>