diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/Configuration.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/Configuration.java
index caf2a1b02..2f05f98d4 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/Configuration.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/Configuration.java
@@ -104,8 +104,6 @@ public class Configuration extends BaseEntity {
private Boolean generateCodeForExpenseSheets = true;
- private JiraConfiguration jiraConfiguration;
-
/**
* Currency code according to ISO-4217 (3 letters)
*/
@@ -505,12 +503,4 @@ public class Configuration extends BaseEntity {
this.secondsPlanningWarning = secondsPlanningWarning;
}
- public JiraConfiguration getJiraConfiguration() {
- return jiraConfiguration;
- }
-
- public void setJiraConfiguration(JiraConfiguration jiraConfiguration) {
- this.jiraConfiguration = jiraConfiguration;
- }
-
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationBootstrap.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationBootstrap.java
index 7f9f41c0b..633b4b85f 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationBootstrap.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationBootstrap.java
@@ -81,13 +81,6 @@ public class ConfigurationBootstrap implements IConfigurationBootstrap {
}
configuration.setLdapConfiguration(ldapConfiguration);
- JiraConfiguration jiraConfiguration = configuration
- .getJiraConfiguration();
- if (jiraConfiguration == null) {
- jiraConfiguration = JiraConfiguration.create();
- }
- configuration.setJiraConfiguration(jiraConfiguration);
-
configurationDAO.save(configuration);
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationTypeOfWorkHoursBootstrap.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationTypeOfWorkHoursBootstrap.java
index 90cfee44b..c3404b920 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationTypeOfWorkHoursBootstrap.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/ConfigurationTypeOfWorkHoursBootstrap.java
@@ -75,8 +75,6 @@ public class ConfigurationTypeOfWorkHoursBootstrap implements
}
configuration.setPersonalTimesheetsTypeOfWorkHours(typeOfWorkHours);
- configuration.getJiraConfiguration().setJiraConnectorTypeOfWorkHours(
- typeOfWorkHours);
configurationDAO.save(configuration);
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/JiraConfiguration.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/JiraConfiguration.java
deleted file mode 100755
index f92b504ea..000000000
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/JiraConfiguration.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * This file is part of LibrePlan
- *
- * Copyright (C) 2013 St. Antoniusziekenhuis
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see .
- */
-
-package org.libreplan.business.common.entities;
-
-import org.libreplan.business.common.BaseEntity;
-import org.libreplan.business.costcategories.entities.TypeOfWorkHours;
-
-/**
- * JiraConfiguration entity
- *
- * @author Miciele Ghiorghis
- */
-public class JiraConfiguration extends BaseEntity {
-
- /**
- * Code prefix for different entities integrated with JIRA.
- */
- public static final String CODE_PREFIX = "JIRA-";
-
- public static JiraConfiguration create() {
- return create(new JiraConfiguration());
- }
-
- private boolean jiraActivated;
-
- private String jiraUrl;
-
- /**
- * Stores one of the next 2 options:
- *
- *
A comma-separated list of labels
- *
A URL that will return a comma-separated list of labels
- *
- */
- private String jiraLabels;
-
- private String jiraUserId;
-
- private String jiraPassword;
-
- private TypeOfWorkHours jiraConnectorTypeOfWorkHours;
-
- /**
- * Constructor for Hibernate. Do not use!
- */
- protected JiraConfiguration() {
- }
-
- public boolean isJiraActivated() {
- return jiraActivated;
- }
-
- public void setJiraActivated(boolean jiraActivated) {
- this.jiraActivated = jiraActivated;
- }
-
- public String getJiraUrl() {
- return jiraUrl;
- }
-
- public void setJiraUrl(String jiraUrl) {
- this.jiraUrl = jiraUrl;
- }
-
- public String getJiraLabels() {
- return jiraLabels;
- }
-
- public void setJiraLabels(String jiraLabels) {
- this.jiraLabels = jiraLabels;
- }
-
- public String getJiraUserId() {
- return jiraUserId;
- }
-
- public void setJiraUserId(String jiraUserId) {
- this.jiraUserId = jiraUserId;
- }
-
- public String getJiraPassword() {
- return jiraPassword;
- }
-
- public void setJiraPassword(String jiraPassword) {
- this.jiraPassword = jiraPassword;
- }
-
- public TypeOfWorkHours getJiraConnectorTypeOfWorkHours() {
- return jiraConnectorTypeOfWorkHours;
- }
-
- public void setJiraConnectorTypeOfWorkHours(TypeOfWorkHours typeOfWorkHours) {
- jiraConnectorTypeOfWorkHours = typeOfWorkHours;
- }
-
-}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectorProperties.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectorProperties.java
index 400cceb9e..ef0b84200 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectorProperties.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectorProperties.java
@@ -42,4 +42,13 @@ public class PredefinedConnectorProperties {
public static String TIM_PRODUCTIVITY_FACTOR = _("Productivity factor");
public static String TIM_DEPARTAMENTS_IMPORT_ROSTER = _("Department IDs to import toster");
+ // Specific for JIRA
+ public static String JIRA_LABELS = _("JIRA labels: comma-separated list of labels or URL");
+ public static String JIRA_HOURS_TYPE = _("Hours type");
+
+ /**
+ * Code prefix for different entities integrated with JIRA.
+ */
+ public static final String JIRA_CODE_PREFIX = "JIRA-";
+
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectors.java b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectors.java
index caa1adfc3..b51adc8a1 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectors.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/common/entities/PredefinedConnectors.java
@@ -39,8 +39,18 @@ public enum PredefinedConnectors {
ConnectorProperty.create(PredefinedConnectorProperties.TIM_NR_DAYS_TIMESHEET, "7"),
ConnectorProperty.create(PredefinedConnectorProperties.TIM_NR_DAYS_ROSTER, "90"),
ConnectorProperty.create(PredefinedConnectorProperties.TIM_PRODUCTIVITY_FACTOR, "100"),
- ConnectorProperty.create(PredefinedConnectorProperties.TIM_DEPARTAMENTS_IMPORT_ROSTER, "0")
- );
+ ConnectorProperty.create(
+ PredefinedConnectorProperties.TIM_DEPARTAMENTS_IMPORT_ROSTER,
+ "0")),
+ JIRA("Jira",
+ ConnectorProperty.create(PredefinedConnectorProperties.ACTIVATED, "N"),
+ ConnectorProperty.create(PredefinedConnectorProperties.SERVER_URL, ""),
+ ConnectorProperty.create(PredefinedConnectorProperties.USERNAME, ""),
+ ConnectorProperty.create(PredefinedConnectorProperties.PASSWORD, ""),
+ ConnectorProperty
+ .create(PredefinedConnectorProperties.JIRA_LABELS, ""),
+ ConnectorProperty.create(
+ PredefinedConnectorProperties.JIRA_HOURS_TYPE, "Default"));
private String name;
private List properties;
diff --git a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/TypeOfWorkHoursDAO.java b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/TypeOfWorkHoursDAO.java
index 59573128c..b98e9f1b5 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/TypeOfWorkHoursDAO.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/costcategories/daos/TypeOfWorkHoursDAO.java
@@ -29,8 +29,12 @@ import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.libreplan.business.common.daos.IConfigurationDAO;
+import org.libreplan.business.common.daos.IConnectorDAO;
import org.libreplan.business.common.daos.IntegrationEntityDAO;
import org.libreplan.business.common.entities.Configuration;
+import org.libreplan.business.common.entities.Connector;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
+import org.libreplan.business.common.entities.PredefinedConnectors;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.common.exceptions.ValidationException;
import org.libreplan.business.costcategories.entities.HourCost;
@@ -56,6 +60,9 @@ public class TypeOfWorkHoursDAO extends IntegrationEntityDAO
@Autowired
private IConfigurationDAO configurationDAO;
+ @Autowired
+ private IConnectorDAO connectorDAO;
+
@Override
public TypeOfWorkHours findUniqueByCode(TypeOfWorkHours typeOfWorkHours)
throws InstanceNotFoundException {
@@ -194,13 +201,17 @@ public class TypeOfWorkHoursDAO extends IntegrationEntityDAO
}
private void checkIsJiraConnectorTypeOfWorkHours(TypeOfWorkHours type) {
- Configuration configuration = configurationDAO.getConfiguration();
- if (configuration.getJiraConfiguration()
- .getJiraConnectorTypeOfWorkHours().getId().equals(type.getId())) {
- throw ValidationException
- .invalidValue(
- "Cannot delete the type of work hours. It is configured as type of work hours for JIRA connector.",
- type);
+ Connector connector = connectorDAO
+ .findUniqueByName(PredefinedConnectors.JIRA.getName());
+ if (connector != null) {
+ String name = connector.getPropertiesAsMap().get(
+ PredefinedConnectorProperties.JIRA_HOURS_TYPE);
+ if (name.equals(type.getName())) {
+ throw ValidationException
+ .invalidValue(
+ "Cannot delete the type of work hours. It is configured as type of work hours for JIRA connector.",
+ type);
+ }
}
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/costcategories/entities/TypeOfWorkHours.java b/libreplan-business/src/main/java/org/libreplan/business/costcategories/entities/TypeOfWorkHours.java
index f26d72b22..0f09a66c1 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/costcategories/entities/TypeOfWorkHours.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/costcategories/entities/TypeOfWorkHours.java
@@ -30,6 +30,9 @@ import org.hibernate.validator.NotNull;
import org.libreplan.business.common.IHumanIdentifiable;
import org.libreplan.business.common.IntegrationEntity;
import org.libreplan.business.common.Registry;
+import org.libreplan.business.common.entities.Connector;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
+import org.libreplan.business.common.entities.PredefinedConnectors;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.costcategories.daos.ITypeOfWorkHoursDAO;
@@ -168,11 +171,13 @@ public class TypeOfWorkHours extends IntegrationEntity implements IHumanIdentifi
@AssertTrue(message = "type of work hours for JIRA connector cannot be disabled")
public boolean checkJiraConnectorTypeOfWorkHoursNotDisabled() {
if (!isNewObject() && !getEnabled()) {
- TypeOfWorkHours typeOfWorkHours = Registry.getConfigurationDAO()
- .getConfiguration().getJiraConfiguration()
- .getJiraConnectorTypeOfWorkHours();
- if (typeOfWorkHours.getId().equals(getId())) {
- return false;
+ Connector connector = Registry.getConnectorDAO().findUniqueByName(
+ PredefinedConnectors.JIRA.getName());
+ if (connector != null) {
+ if (this.name.equals(connector.getPropertiesAsMap().get(
+ PredefinedConnectorProperties.JIRA_HOURS_TYPE))) {
+ return false;
+ }
}
}
diff --git a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java
index b49d160c8..11aa85c68 100644
--- a/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java
+++ b/libreplan-business/src/main/java/org/libreplan/business/orders/entities/Order.java
@@ -120,8 +120,6 @@ public class Order extends OrderLineGroup implements Comparable {
private Set customerCommunications = new HashSet();
- private String importedLabel;
-
@Valid
private SortedSet deliveringDates = new TreeSet(
new DeliverDateComparator());
@@ -692,13 +690,4 @@ public class Order extends OrderLineGroup implements Comparable {
return true;
}
-
- public String getImportedLabel() {
- return importedLabel;
- }
-
- public void setImportedLabel(String importedLabel) {
- this.importedLabel = importedLabel;
- }
-
}
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 75cf96b4e..2a3b73ca8 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
@@ -52,7 +52,7 @@ import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalA
import org.libreplan.business.common.IntegrationEntity;
import org.libreplan.business.common.Registry;
import org.libreplan.business.common.daos.IIntegrationEntityDAO;
-import org.libreplan.business.common.entities.JiraConfiguration;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
import org.libreplan.business.common.exceptions.ValidationException;
import org.libreplan.business.labels.entities.Label;
import org.libreplan.business.materials.entities.MaterialAssignment;
@@ -1686,7 +1686,7 @@ public abstract class OrderElement extends IntegrationEntity implements
if (code == null) {
return false;
}
- return code.startsWith(JiraConfiguration.CODE_PREFIX);
+ return code.startsWith(PredefinedConnectorProperties.JIRA_CODE_PREFIX);
}
}
diff --git a/libreplan-business/src/main/resources/db.changelog-1.3.xml b/libreplan-business/src/main/resources/db.changelog-1.3.xml
index cb055b51c..16b5f4667 100644
--- a/libreplan-business/src/main/resources/db.changelog-1.3.xml
+++ b/libreplan-business/src/main/resources/db.changelog-1.3.xml
@@ -208,107 +208,6 @@
columnDataType="INTEGER" />
-
-
-
- Add new column jira_activated with default value FALSE to configuration table
-
-
-
-
-
-
-
-
-
-
- Add new column jira_url in table configuration
-
-
-
-
-
-
-
-
- Add new column jira_label_url in table configuration
-
-
-
-
-
-
-
-
- Add new column jira_user_id in table configuration
-
-
-
-
-
-
-
-
- Add new column jira_user_id in table configuration
-
-
-
-
-
-
-
-
- Add new column imported_label in table order_table
-
-
-
-
-
-
-
-
- Add new column jira_connector_type_of_work_hours to configuration
- table.
-
-
-
-
-
-
-
-
-
- Rename column jira_label_url to jira_labels in configuration table
-
-
-
-
-
- Change column jira_labels in configuration to TEXT
-
-
-
-
- Change column jira_labels in configuration to TEXT in MySQL
- ALTER TABLE configuration MODIFY jira_labels TEXT
- Create new table order_sync_info
diff --git a/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Configuration.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Configuration.hbm.xml
index e06c71260..05c238015 100644
--- a/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Configuration.hbm.xml
+++ b/libreplan-business/src/main/resources/org/libreplan/business/common/entities/Configuration.hbm.xml
@@ -120,18 +120,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml
index 5df74a4f9..58424ec82 100644
--- a/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml
+++ b/libreplan-business/src/main/resources/org/libreplan/business/orders/entities/Orders.hbm.xml
@@ -126,9 +126,6 @@
-
-
-
diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraOrderElementSynchronizer.java b/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraOrderElementSynchronizer.java
index 4f643118e..f0d2b243b 100755
--- a/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraOrderElementSynchronizer.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraOrderElementSynchronizer.java
@@ -23,8 +23,10 @@ import java.util.List;
import org.libreplan.business.advance.entities.AdvanceMeasurement;
import org.libreplan.business.advance.entities.DirectAdvanceAssignment;
+import org.libreplan.business.common.entities.ConnectorException;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.OrderElement;
+import org.libreplan.business.orders.entities.OrderSyncInfo;
import org.libreplan.importers.jira.IssueDTO;
/**
@@ -59,8 +61,10 @@ public interface IJiraOrderElementSynchronizer {
* search criteria for jira issues
*
* @return list of jira issues
+ * @throws ConnectorException
+ * if connector not found or contains invalid connection values
*/
- List getJiraIssues(String label);
+ List getJiraIssues(String label) throws ConnectorException;
/**
* Synchronizes the list of {@link OrderElement}s,
@@ -82,6 +86,25 @@ public interface IJiraOrderElementSynchronizer {
*/
void syncOrderElementsWithJiraIssues(List issues, Order order);
+ /**
+ * Saves synchronization info
+ *
+ * @param key
+ * the key(label)
+ * @param order
+ * an order which already synchronized
+ */
+ void saveSyncInfo(String key, Order order);
+
+ /**
+ * Gets the most recent synchronized info
+ *
+ * @param order
+ * the order
+ * @return recent synchronized time sheet info
+ */
+ OrderSyncInfo getOrderLastSyncInfo(Order order);
+
/**
* returns synchronization info, success or fail info
*/
diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraTimesheetSynchronizer.java b/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraTimesheetSynchronizer.java
index 9c263923c..f7fb4c920 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraTimesheetSynchronizer.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/importers/IJiraTimesheetSynchronizer.java
@@ -21,6 +21,7 @@ package org.libreplan.importers;
import java.util.List;
+import org.libreplan.business.common.entities.ConnectorException;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.workreports.entities.WorkReportType;
import org.libreplan.importers.jira.IssueDTO;
@@ -42,7 +43,6 @@ public interface IJiraTimesheetSynchronizer {
/**
* Synchronize jira timesheet with the specified jira issues .
*
- *
* Loop through all jira issues and check if timesheet is
* already exist for the specified issue item. If it is, update the
* timesheet with that issue item. If not create new one
@@ -51,8 +51,10 @@ public interface IJiraTimesheetSynchronizer {
* the jira issues
* @param order
* an existing order
+ * @throws ConnectorException
+ * if not valid connector or connector contains invalid values
*/
- void syncJiraTimesheetWithJiraIssues(List issues, Order order);
+ void syncJiraTimesheetWithJiraIssues(List issues, Order order) throws ConnectorException;
/**
* returns synchronization info, success or fail info
diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/JiraOrderElementSynchronizer.java b/libreplan-webapp/src/main/java/org/libreplan/importers/JiraOrderElementSynchronizer.java
index b723ae2c6..6dcc0bb17 100755
--- a/libreplan-webapp/src/main/java/org/libreplan/importers/JiraOrderElementSynchronizer.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/importers/JiraOrderElementSynchronizer.java
@@ -28,6 +28,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
@@ -37,12 +38,17 @@ import org.libreplan.business.advance.entities.AdvanceType;
import org.libreplan.business.advance.entities.DirectAdvanceAssignment;
import org.libreplan.business.advance.exceptions.DuplicateAdvanceAssignmentForOrderElementException;
import org.libreplan.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
-import org.libreplan.business.common.daos.IConfigurationDAO;
-import org.libreplan.business.common.entities.JiraConfiguration;
+import org.libreplan.business.common.daos.IConnectorDAO;
+import org.libreplan.business.common.entities.Connector;
+import org.libreplan.business.common.entities.ConnectorException;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
+import org.libreplan.business.common.entities.PredefinedConnectors;
+import org.libreplan.business.orders.daos.IOrderSyncInfoDAO;
import org.libreplan.business.orders.entities.HoursGroup;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.orders.entities.OrderLine;
+import org.libreplan.business.orders.entities.OrderSyncInfo;
import org.libreplan.business.workingday.EffortDuration;
import org.libreplan.importers.jira.IssueDTO;
import org.libreplan.importers.jira.StatusDTO;
@@ -64,17 +70,24 @@ import org.springframework.transaction.annotation.Transactional;
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class JiraOrderElementSynchronizer implements IJiraOrderElementSynchronizer {
- @Autowired
- private IConfigurationDAO configurationDAO;
-
private JiraSyncInfo jiraSyncInfo;
+ @Autowired
+ private IConnectorDAO connectorDAO;
+
+ @Autowired
+ IOrderSyncInfoDAO orderSyncInfoDAO;
@Override
@Transactional(readOnly = true)
public List getAllJiraLabels() {
- String jiraLabels = configurationDAO.getConfiguration()
- .getJiraConfiguration().getJiraLabels();
+ Connector connector = getJiraConnector();
+ if (connector == null) {
+ return null;
+ }
+
+ String jiraLabels = connector.getPropertiesAsMap().get(
+ PredefinedConnectorProperties.JIRA_LABELS);
String labels;
try {
@@ -88,13 +101,26 @@ public class JiraOrderElementSynchronizer implements IJiraOrderElementSynchroniz
@Override
@Transactional(readOnly = true)
- public List getJiraIssues(String label) {
- JiraConfiguration jiraConfiguration = configurationDAO
- .getConfiguration().getJiraConfiguration();
+ public List getJiraIssues(String label) throws ConnectorException {
- String url = jiraConfiguration.getJiraUrl();
- String username = jiraConfiguration.getJiraUserId();
- String password = jiraConfiguration.getJiraPassword();
+ Connector connector = getJiraConnector();
+ if (connector == null) {
+ throw new ConnectorException("Jira connector not found");
+ }
+
+ if (!connector.areConnectionValuesValid()) {
+ throw new ConnectorException(
+ "Connection values of JIRA connector are invalid");
+ }
+
+ Map properties = connector.getPropertiesAsMap();
+ String url = properties.get(PredefinedConnectorProperties.SERVER_URL);
+
+ String username = properties
+ .get(PredefinedConnectorProperties.USERNAME);
+
+ String password = properties
+ .get(PredefinedConnectorProperties.PASSWORD);
String path = JiraRESTClient.PATH_SEARCH;
String query = "labels=" + label;
@@ -112,7 +138,8 @@ public class JiraOrderElementSynchronizer implements IJiraOrderElementSynchroniz
jiraSyncInfo = new JiraSyncInfo();
for (IssueDTO issue : issues) {
- String code = JiraConfiguration.CODE_PREFIX + order.getCode() + "-"
+ String code = PredefinedConnectorProperties.JIRA_CODE_PREFIX
+ + order.getCode() + "-"
+ issue.getKey();
String name = issue.getFields().getSummary();
@@ -397,4 +424,29 @@ public class JiraOrderElementSynchronizer implements IJiraOrderElementSynchroniz
return jiraSyncInfo;
}
+ /**
+ * returns JIRA connector
+ */
+ private Connector getJiraConnector() {
+ return connectorDAO.findUniqueByName(PredefinedConnectors.JIRA
+ .getName());
+ }
+
+ @Override
+ @Transactional
+ public void saveSyncInfo(String key, Order order) {
+ OrderSyncInfo orderSyncInfo = OrderSyncInfo.create(order,
+ PredefinedConnectors.JIRA.getName());
+ orderSyncInfo.setKey(key);
+ orderSyncInfoDAO.save(orderSyncInfo);
+ }
+
+ @Override
+ @Transactional(readOnly = true)
+ public OrderSyncInfo getOrderLastSyncInfo(Order order) {
+ return orderSyncInfoDAO.findLastSynchronizedInfoByOrderAndConnectorId(
+ order, PredefinedConnectors.JIRA.getName());
+
+ }
+
}
diff --git a/libreplan-webapp/src/main/java/org/libreplan/importers/JiraTimesheetSynchronizer.java b/libreplan-webapp/src/main/java/org/libreplan/importers/JiraTimesheetSynchronizer.java
index 872ddb88a..415dfda94 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/importers/JiraTimesheetSynchronizer.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/importers/JiraTimesheetSynchronizer.java
@@ -22,15 +22,21 @@ package org.libreplan.importers;
import java.util.List;
import java.util.Set;
+import org.apache.commons.lang.StringUtils;
import org.hibernate.NonUniqueResultException;
import org.libreplan.business.common.IAdHocTransactionService;
-import org.libreplan.business.common.daos.IConfigurationDAO;
-import org.libreplan.business.common.entities.JiraConfiguration;
+import org.libreplan.business.common.daos.IConnectorDAO;
+import org.libreplan.business.common.entities.Connector;
+import org.libreplan.business.common.entities.ConnectorException;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
+import org.libreplan.business.common.entities.PredefinedConnectors;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.costcategories.daos.ITypeOfWorkHoursDAO;
import org.libreplan.business.costcategories.entities.TypeOfWorkHours;
+import org.libreplan.business.orders.daos.IOrderSyncInfoDAO;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.OrderElement;
+import org.libreplan.business.orders.entities.OrderSyncInfo;
import org.libreplan.business.resources.daos.IWorkerDAO;
import org.libreplan.business.resources.entities.Resource;
import org.libreplan.business.resources.entities.Worker;
@@ -90,14 +96,17 @@ public class JiraTimesheetSynchronizer implements IJiraTimesheetSynchronizer {
private ITypeOfWorkHoursDAO typeOfWorkHoursDAO;
@Autowired
- private IConfigurationDAO configurationDAO;
+ private IConnectorDAO connectorDAO;
+
+ @Autowired
+ private IOrderSyncInfoDAO orderSyncInfoDAO;
@Autowired
private IAdHocTransactionService adHocTransactionService;
@Override
@Transactional
- public void syncJiraTimesheetWithJiraIssues(List issues, Order order) {
+ public void syncJiraTimesheetWithJiraIssues(List issues, Order order) throws ConnectorException {
jiraSyncInfo = new JiraSyncInfo();
workReportType = getJiraTimesheetsWorkReportType();
@@ -109,7 +118,21 @@ public class JiraTimesheetSynchronizer implements IJiraTimesheetSynchronizer {
return;
}
- String code = order.getCode() + "-" + order.getImportedLabel();
+ OrderSyncInfo orderSyncInfo = orderSyncInfoDAO
+ .findLastSynchronizedInfoByOrderAndConnectorId(order,
+ PredefinedConnectors.JIRA.getName());
+ if (orderSyncInfo == null) {
+ jiraSyncInfo.addSyncFailedReason("Order '" + order.getName()
+ + "' not found. Order probalbly not synchronized");
+ return;
+ }
+ if (StringUtils.isBlank(orderSyncInfo.getKey())) {
+ jiraSyncInfo.addSyncFailedReason("Key for Order '"
+ + order.getName() + "' is empty");
+ return;
+ }
+
+ String code = order.getCode() + "-" + orderSyncInfo.getKey();
WorkReport workReport = updateOrCreateWorkReport(code);
@@ -126,7 +149,7 @@ public class JiraTimesheetSynchronizer implements IJiraTimesheetSynchronizer {
+ issue.getKey() + "' issue");
} else {
- String codeOrderElement = JiraConfiguration.CODE_PREFIX
+ String codeOrderElement = PredefinedConnectorProperties.JIRA_CODE_PREFIX
+ order.getCode() + "-" + issue.getKey();
OrderElement orderElement = order.getOrderElement(codeOrderElement);
@@ -291,10 +314,31 @@ public class JiraTimesheetSynchronizer implements IJiraTimesheetSynchronizer {
* Returns {@link TypeOfWorkHours} configured for JIRA connector
*
* @return TypeOfWorkHours for JIRA connector
+ * @throws ConnectorException
*/
- private TypeOfWorkHours getTypeOfWorkHours() {
- return configurationDAO.getConfiguration().getJiraConfiguration()
- .getJiraConnectorTypeOfWorkHours();
+ private TypeOfWorkHours getTypeOfWorkHours() throws ConnectorException {
+ Connector connector = connectorDAO
+ .findUniqueByName(PredefinedConnectors.JIRA.getName());
+ if (connector == null) {
+ throw new ConnectorException("Connector not found");
+ }
+
+ TypeOfWorkHours typeOfWorkHours;
+ String name = connector.getPropertiesAsMap().get(
+ PredefinedConnectorProperties.JIRA_HOURS_TYPE);
+
+ if (StringUtils.isBlank(name)) {
+ throw new ConnectorException(
+ "Hours type should not be empty to synchronine timesheets");
+ }
+
+ try {
+ typeOfWorkHours = typeOfWorkHoursDAO.findUniqueByName(name);
+ } catch (InstanceNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+
+ return typeOfWorkHours;
}
/**
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationController.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationController.java
index e9c4a2a93..abd889adf 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationController.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationController.java
@@ -47,7 +47,6 @@ import org.libreplan.business.common.entities.Connector;
import org.libreplan.business.common.entities.ConnectorProperty;
import org.libreplan.business.common.entities.EntityNameEnum;
import org.libreplan.business.common.entities.EntitySequence;
-import org.libreplan.business.common.entities.JiraConfiguration;
import org.libreplan.business.common.entities.LDAPConfiguration;
import org.libreplan.business.common.entities.PersonalTimesheetsPeriodicityEnum;
import org.libreplan.business.common.entities.PredefinedConnectorProperties;
@@ -288,42 +287,6 @@ public class ConfigurationController extends GenericForwardComposer {
}
}
- /**
- * tests jira connection
- */
- public void testJiraConnection() {
-
- JiraConfiguration jiraConfiguration = configurationModel
- .getJiraConfiguration();
-
- try {
-
- WebClient client = WebClient.create(jiraConfiguration.getJiraUrl());
- client.path(JiraRESTClient.PATH_AUTH_SESSION).accept(
- MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML);
-
- org.libreplan.ws.common.impl.Util.addAuthorizationHeader(client,
- jiraConfiguration.getJiraUserId(),
- jiraConfiguration.getJiraPassword());
-
- Response response = client.get();
-
- if (response.getStatus() == Status.OK.getStatusCode()) {
- messages.showMessage(Level.INFO,
- _("JIRA connection was successful"));
- } else {
- LOG.info("Status code: " + response.getStatus());
- messages.showMessage(Level.ERROR,
- _("Cannot connect to JIRA server"));
- }
-
- } catch (Exception e) {
- LOG.info(e);
- messages.showMessage(Level.ERROR,
- _("Cannot connect to JIRA server"));
- }
- }
-
/**
* Tests connection
*/
@@ -344,6 +307,9 @@ public class ConfigurationController extends GenericForwardComposer {
if (selectedConnector.getName().equals(
PredefinedConnectors.TIM.getName())) {
testTimConnection(url, username, password);
+ } else if (selectedConnector.getName().equals(
+ PredefinedConnectors.JIRA.getName())) {
+ testJiraConnection(url, username, password);
} else {
throw new RuntimeException("Unknown connector");
}
@@ -367,6 +333,44 @@ public class ConfigurationController extends GenericForwardComposer {
}
}
+ /**
+ * Test JIRA connection
+ *
+ * @param url
+ * the url
+ * @param username
+ * the username
+ * @param password
+ * the password
+ */
+ private void testJiraConnection(String url, String username, String password) {
+
+ try {
+
+ WebClient client = WebClient.create(url);
+ client.path(JiraRESTClient.PATH_AUTH_SESSION).accept(
+ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML);
+
+ org.libreplan.ws.common.impl.Util.addAuthorizationHeader(client,
+ username, password);
+
+ Response response = client.get();
+
+ if (response.getStatus() == Status.OK.getStatusCode()) {
+ messages.showMessage(Level.INFO,
+ _("JIRA connection was successful"));
+ } else {
+ LOG.error("Status code: " + response.getStatus());
+ messages.showMessage(Level.ERROR,
+ _("Cannot connect to JIRA server"));
+ }
+
+ } catch (Exception e) {
+ LOG.error(e);
+ messages.showMessage(Level.ERROR,
+ _("Cannot connect to JIRA server"));
+ }
+ }
private boolean checkValidEntitySequenceRows() {
Rows rows = entitySequencesGrid.getRows();
@@ -891,14 +895,6 @@ public class ConfigurationController extends GenericForwardComposer {
configurationModel.setLdapConfiguration(ldapConfiguration);
}
- public JiraConfiguration getJiraConfiguration() {
- return configurationModel.getJiraConfiguration();
- }
-
- public void setJiraConfiguration(JiraConfiguration jiraConfiguration) {
- configurationModel.setJiraConfiguration(jiraConfiguration);
- }
-
public RowRenderer getAllUserRolesRenderer() {
return new RowRenderer() {
@Override
@@ -1049,14 +1045,6 @@ public class ConfigurationController extends GenericForwardComposer {
configurationModel.setSecondsPlanningWarning(secondsPlanningWarning);
}
- public TypeOfWorkHours getJiraConnectorTypeOfWorkHours() {
- return configurationModel.getJiraConnectorTypeOfWorkHours();
- }
-
- public void setJiraConnectorTypeOfWorkHours(TypeOfWorkHours typeOfWorkHours) {
- configurationModel.setJiraConnectorTypeOfWorkHours(typeOfWorkHours);
- }
-
public List getConnectors() {
return configurationModel.getConnectors();
}
@@ -1130,7 +1118,8 @@ public class ConfigurationController extends GenericForwardComposer {
} else if (key
.equals(PredefinedConnectorProperties.SERVER_URL)
|| key.equals(PredefinedConnectorProperties.USERNAME)
- || key.equals(PredefinedConnectorProperties.PASSWORD)) {
+ || key.equals(PredefinedConnectorProperties.PASSWORD)
+ || key.equals(PredefinedConnectorProperties.JIRA_HOURS_TYPE)) {
((InputElement) comp).setConstraint("no empty:"
+ _("cannot be empty"));
} else if (key
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java
index 4c8d2f9cb..fdbcada4c 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java
@@ -45,7 +45,6 @@ import org.libreplan.business.common.entities.Configuration;
import org.libreplan.business.common.entities.Connector;
import org.libreplan.business.common.entities.EntityNameEnum;
import org.libreplan.business.common.entities.EntitySequence;
-import org.libreplan.business.common.entities.JiraConfiguration;
import org.libreplan.business.common.entities.LDAPConfiguration;
import org.libreplan.business.common.entities.PersonalTimesheetsPeriodicityEnum;
import org.libreplan.business.common.entities.ProgressType;
@@ -162,8 +161,6 @@ public class ConfigurationModel implements IConfigurationModel {
private void forceLoad(Configuration configuration) {
forceLoad(configuration.getDefaultCalendar());
forceLoad(configuration.getPersonalTimesheetsTypeOfWorkHours());
- forceLoad(configuration.getJiraConfiguration()
- .getJiraConnectorTypeOfWorkHours());
}
private void forceLoad(BaseCalendar calendar) {
@@ -694,38 +691,6 @@ public class ConfigurationModel implements IConfigurationModel {
configuration.setSecondsPlanningWarning(secondsPlanningWarning);
}
- @Override
- public void setJiraConfiguration(JiraConfiguration jiraConfiguration) {
- configuration.setJiraConfiguration(jiraConfiguration);
- }
-
- @Override
- public JiraConfiguration getJiraConfiguration() {
- return configuration.getJiraConfiguration();
- }
-
- @Override
- public TypeOfWorkHours getJiraConnectorTypeOfWorkHours() {
- JiraConfiguration jiraConfiguration = configuration
- .getJiraConfiguration();
- if (jiraConfiguration != null) {
- return jiraConfiguration.getJiraConnectorTypeOfWorkHours();
- }
- return null;
- }
-
- @Override
- public void setJiraConnectorTypeOfWorkHours(TypeOfWorkHours typeOfWorkHours) {
- if (configuration != null) {
- JiraConfiguration jiraConfiguration = configuration
- .getJiraConfiguration();
- if (jiraConfiguration != null) {
- jiraConfiguration
- .setJiraConnectorTypeOfWorkHours(typeOfWorkHours);
- }
- }
- }
-
private void saveConnectors() {
for (Connector connector : connectors) {
connectorDAO.save(connector);
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/IConfigurationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/IConfigurationModel.java
index 3f250d38f..c3f488355 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/common/IConfigurationModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/IConfigurationModel.java
@@ -28,7 +28,6 @@ import org.libreplan.business.calendars.entities.BaseCalendar;
import org.libreplan.business.common.entities.Connector;
import org.libreplan.business.common.entities.EntityNameEnum;
import org.libreplan.business.common.entities.EntitySequence;
-import org.libreplan.business.common.entities.JiraConfiguration;
import org.libreplan.business.common.entities.LDAPConfiguration;
import org.libreplan.business.common.entities.PersonalTimesheetsPeriodicityEnum;
import org.libreplan.business.common.entities.ProgressType;
@@ -187,14 +186,6 @@ public interface IConfigurationModel {
void setSecondsPlanningWarning(
Integer planningWarningExitWithoutSavingSeconds);
- void setJiraConfiguration(JiraConfiguration jiraConfiguration);
-
- JiraConfiguration getJiraConfiguration();
-
- TypeOfWorkHours getJiraConnectorTypeOfWorkHours();
-
- void setJiraConnectorTypeOfWorkHours(TypeOfWorkHours typeOfWorkHours);
-
List getConnectors();
Connector getConnectorByName(String name);
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/IOrderModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/IOrderModel.java
index 0986edd16..d8c3d7fbb 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/IOrderModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/IOrderModel.java
@@ -148,6 +148,4 @@ public interface IOrderModel extends IIntegrationEntityModel {
boolean isOnlyChildAndParentAlreadyInUseByHoursOrExpenses(
OrderElement orderElement);
- boolean isJiraActivated();
-
}
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java
index 04027d26d..217321061 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderCRUDController.java
@@ -39,7 +39,10 @@ import javax.ws.rs.WebApplicationException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.LogFactory;
import org.libreplan.business.calendars.entities.BaseCalendar;
-import org.libreplan.business.common.daos.IConfigurationDAO;
+import org.libreplan.business.common.daos.IConnectorDAO;
+import org.libreplan.business.common.entities.Connector;
+import org.libreplan.business.common.entities.ConnectorException;
+import org.libreplan.business.common.entities.PredefinedConnectors;
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
import org.libreplan.business.externalcompanies.entities.DeadlineCommunication;
import org.libreplan.business.externalcompanies.entities.DeliverDateComparator;
@@ -50,6 +53,7 @@ import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.Order.SchedulingMode;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.orders.entities.OrderStatusEnum;
+import org.libreplan.business.orders.entities.OrderSyncInfo;
import org.libreplan.business.planner.entities.PositionConstraintType;
import org.libreplan.business.templates.entities.OrderTemplate;
import org.libreplan.business.users.entities.UserRole;
@@ -210,7 +214,7 @@ public class OrderCRUDController extends GenericForwardComposer {
private IJiraTimesheetSynchronizer jiraTimesheetSynchronizer;
@Autowired
- private IConfigurationDAO configurationDAO;
+ private IConnectorDAO connectorDAO;
@Override
@@ -1706,9 +1710,18 @@ public class OrderCRUDController extends GenericForwardComposer {
private Button startJiraSyncButton, cancelJiraSyncButton, syncWithJiraButton;
private Combobox comboJiraLabel;
+ private boolean isJiraActivated() {
+ Connector connector = connectorDAO
+ .findUniqueByName(PredefinedConnectors.JIRA.getName());
+ if (connector == null) {
+ return false;
+ }
+ return connector.isActivated();
+ }
+
public boolean isJiraDeactivated() {
- return !configurationDAO.getConfigurationWithReadOnlyTransaction()
- .getJiraConfiguration().isJiraActivated();
+ return !isJiraActivated();
+
}
public void syncWithJira() {
@@ -1745,13 +1758,21 @@ public class OrderCRUDController extends GenericForwardComposer {
List issues = jiraOrderElementSynchronizer
.getJiraIssues(label);
+ if (issues == null || issues.isEmpty()) {
+ messagesForUser.showMessage(Level.ERROR,
+ _("No JIRA issues to import"));
+ return;
+ }
+
order.setCodeAutogenerated(false);
- order.setImportedLabel(label);
jiraOrderElementSynchronizer.syncOrderElementsWithJiraIssues(
issues, order);
saveAndContinue(false);
+
+ jiraOrderElementSynchronizer.saveSyncInfo(label, order);
+
if (jirasyncPopup != null) {
jirasyncPopup.close();
}
@@ -1769,9 +1790,16 @@ public class OrderCRUDController extends GenericForwardComposer {
LOG.info(e);
messagesForUser.showMessage(Level.ERROR,
_("Cannot connect to JIRA server"));
+ } catch (ConnectorException e) {
+ messagesForUser.showMessage(Level.ERROR,
+ _("Failed: " + e.getMessage()));
}
}
+ public OrderSyncInfo getOrderLastSyncInfo() {
+ return jiraOrderElementSynchronizer.getOrderLastSyncInfo(getOrder());
+ }
+
private void showSyncInfo() {
Map args = new HashMap();
@@ -1861,10 +1889,6 @@ public class OrderCRUDController extends GenericForwardComposer {
}
}
- public boolean isJiraActivated() {
- return orderModel.isJiraActivated();
- }
-
public void setupTimSynchronizationController() {
if (timSynchronizationController == null) {
timSynchronizationController = new TimSynchronizationController();
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java
index 031eef0d1..2a2484bbc 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderElementTreeController.java
@@ -36,9 +36,11 @@ import java.util.Set;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
-import org.libreplan.business.common.daos.IConfigurationDAO;
+import org.libreplan.business.common.daos.IConnectorDAO;
+import org.libreplan.business.common.entities.Connector;
import org.libreplan.business.common.entities.EntitySequence;
-import org.libreplan.business.common.entities.JiraConfiguration;
+import org.libreplan.business.common.entities.PredefinedConnectorProperties;
+import org.libreplan.business.common.entities.PredefinedConnectors;
import org.libreplan.business.orders.entities.Order;
import org.libreplan.business.orders.entities.OrderElement;
import org.libreplan.business.orders.entities.OrderLine;
@@ -121,7 +123,7 @@ public class OrderElementTreeController extends TreeController {
private Popup filterOptionsPopup;
@Autowired
- private IConfigurationDAO configurationDAO;
+ private IConnectorDAO connectorDAO;
public List getLabels() {
return orderModel.getLabels();
@@ -467,9 +469,17 @@ public class OrderElementTreeController extends TreeController {
String code = orderElement.getCode();
A hyperlink = new A(code);
- String jiraUrl = configurationDAO.getConfigurationWithReadOnlyTransaction().getJiraConfiguration().getJiraUrl();
+ Connector connector = connectorDAO
+ .findUniqueByName(PredefinedConnectors.JIRA.getName());
+ if (connector == null) {
+ return;
+ }
- String codeWithoutPrefix = StringUtils.removeStart(code, JiraConfiguration.CODE_PREFIX);
+ String jiraUrl = connector.getPropertiesAsMap().get(
+ PredefinedConnectorProperties.SERVER_URL);
+
+ String codeWithoutPrefix = StringUtils.removeStart(code,
+ PredefinedConnectorProperties.JIRA_CODE_PREFIX);
codeWithoutPrefix = StringUtils.removeStart(codeWithoutPrefix,
orderElement.getOrder().getCode()
+ EntitySequence.CODE_SEPARATOR_CHILDREN);
diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java
index 6e0168085..ea29d4eec 100644
--- a/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java
+++ b/libreplan-webapp/src/main/java/org/libreplan/web/orders/OrderModel.java
@@ -928,11 +928,4 @@ public class OrderModel extends IntegrationEntityModel implements IOrderModel {
}
}
- @Override
- @Transactional(readOnly = true)
- public boolean isJiraActivated() {
- return configurationDAO.getConfiguration().getJiraConfiguration()
- .isJiraActivated();
- }
-
}
diff --git a/libreplan-webapp/src/main/webapp/common/configuration.zul b/libreplan-webapp/src/main/webapp/common/configuration.zul
index dbcac2674..8779de873 100644
--- a/libreplan-webapp/src/main/webapp/common/configuration.zul
+++ b/libreplan-webapp/src/main/webapp/common/configuration.zul
@@ -42,7 +42,6 @@
-
@@ -415,46 +414,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-