if (request != null && request.getParameterValues("overridePluginDefault") != null) {
overridePluginDefault = true;
}
//fix app id letter case issue during import
AppDefinition orgAppDef = loadAppDefinition(appDef.getAppId(), null);
String appId = appDef.getAppId();
if (orgAppDef != null) {
appId = orgAppDef.getAppId();
}
LogUtil.debug(getClass().getName(), "Importing app " + appDef.getId());
AppDefinition newAppDef = new AppDefinition();
newAppDef.setAppId(appId);
newAppDef.setVersion(appVersion);
newAppDef.setId(appId);
newAppDef.setName(appDef.getName());
newAppDef.setPublished(Boolean.FALSE);
newAppDef.setDateCreated(new Date());
newAppDef.setDateModified(new Date());
newAppDef.setLicense(appDef.getLicense());
appDefinitionDao.saveOrUpdate(newAppDef);
if (appDef.getFormDefinitionList() != null) {
for (FormDefinition o : appDef.getFormDefinitionList()) {
o.setAppDefinition(newAppDef);
formDefinitionDao.add(o);
}
String currentTable = "";
Collection<String> importedForms = new ArrayList<String>();
try {
for (FormDefinition o : appDef.getFormDefinitionList()) {
currentTable = o.getTableName();
// initialize db table by making a dummy load
String dummyKey = "xyz123";
formDataDao.loadWithoutTransaction(o.getId(), o.getTableName(), dummyKey);
importedForms.add(o.getId());
LogUtil.debug(getClass().getName(), "Initialized form " + o.getId() + " with table " + o.getTableName());
}
} catch (Exception e) {
//error creating form data table, rollback
for (String formId : importedForms) {
formDefinitionDao.delete(formId, newAppDef);
}
appDefinitionDao.delete(newAppDef);
String errorMessage = "";
if (currentTable.length() > 20) {
errorMessage = ": " + ResourceBundleUtil.getMessage("form.form.invalidId");
}
throw new ImportAppException(ResourceBundleUtil.getMessage("console.app.import.error.createTable", new Object[]{currentTable, errorMessage}));
}
}
if (appDef.getDatalistDefinitionList() != null) {
for (DatalistDefinition o : appDef.getDatalistDefinitionList()) {
o.setAppDefinition(newAppDef);
datalistDefinitionDao.add(o);
LogUtil.debug(getClass().getName(), "Added list " + o.getId());
}
}
if (appDef.getUserviewDefinitionList() != null) {
for (UserviewDefinition o : appDef.getUserviewDefinitionList()) {
o.setAppDefinition(newAppDef);
userviewDefinitionDao.add(o);
LogUtil.debug(getClass().getName(), "Added userview " + o.getId());
}
}
if (appDef.getEnvironmentVariableList() != null) {
for (EnvironmentVariable o : appDef.getEnvironmentVariableList()) {
if (!overrideEnvVariable && orgAppDef != null && orgAppDef.getEnvironmentVariableList() != null) {
EnvironmentVariable temp = environmentVariableDao.loadById(o.getId(), orgAppDef);
if (temp != null) {
o.setValue(temp.getValue());
}
}
if (o.getValue() == null) {
o.setValue("");
}
o.setAppDefinition(newAppDef);
environmentVariableDao.add(o);
}
}
if (appDef.getMessageList() != null) {
for (Message o : appDef.getMessageList()) {
o.setAppDefinition(newAppDef);
messageDao.add(o);
}
}
if (appDef.getPluginDefaultPropertiesList() != null) {
for (PluginDefaultProperties o : appDef.getPluginDefaultPropertiesList()) {
if (!overridePluginDefault && orgAppDef != null && orgAppDef.getPluginDefaultPropertiesList() != null) {
PluginDefaultProperties temp = pluginDefaultPropertiesDao.loadById(o.getId(), orgAppDef);
if (temp != null) {
o.setPluginProperties(temp.getPluginProperties());
}
}
o.setAppDefinition(newAppDef);
pluginDefaultPropertiesDao.add(o);
}
}
try {
if (xpdl != null) {
PackageDefinition oldPackageDef = appDef.getPackageDefinition();
//deploy package
PackageDefinition packageDef = deployWorkflowPackage(newAppDef.getAppId(), newAppDef.getVersion().toString(), xpdl, false);
if (packageDef != null) {
if (oldPackageDef != null) {
if (oldPackageDef.getPackageActivityFormMap() != null) {
for (Entry e : oldPackageDef.getPackageActivityFormMap().entrySet()) {
PackageActivityForm form = (PackageActivityForm) e.getValue();
form.setPackageDefinition(packageDef);
packageDefinitionDao.addAppActivityForm(newAppDef.getAppId(), appVersion, form);
}
}
if (oldPackageDef.getPackageActivityPluginMap() != null) {
for (Entry e : oldPackageDef.getPackageActivityPluginMap().entrySet()) {
PackageActivityPlugin plugin = (PackageActivityPlugin) e.getValue();
plugin.setPackageDefinition(packageDef);
packageDefinitionDao.addAppActivityPlugin(newAppDef.getAppId(), appVersion, plugin);
}
}
if (oldPackageDef.getPackageParticipantMap() != null) {
for (Entry e : oldPackageDef.getPackageParticipantMap().entrySet()) {
PackageParticipant participant = (PackageParticipant) e.getValue();
participant.setPackageDefinition(packageDef);
packageDefinitionDao.addAppParticipant(newAppDef.getAppId(), appVersion, participant);
}
}
}
// generate image for each process
List<WorkflowProcess> processList = workflowManager.getProcessList("", Boolean.TRUE, 0, 10000, packageDef.getId(), Boolean.FALSE, Boolean.FALSE);
String designerBaseUrl = AppUtil.getDesignerWebBaseUrl();
if (designerBaseUrl != null && !designerBaseUrl.isEmpty()) {
for (WorkflowProcess process : processList) {
XpdlImageUtil.generateXpdlImage(designerBaseUrl, process.getId(), true);
}
}
}
}
} catch (Exception e) {
LogUtil.error(getClass().getName(), e, "Error deploying package for " + appDef.getAppId());
}
// reload app from DB
newAppDef = loadAppDefinition(newAppDef.getAppId(), newAppDef.getVersion().toString());
LogUtil.debug(getClass().getName(), "Finished importing app " + newAppDef.getId() + " version " + newAppDef.getVersion());
return newAppDef;
}