use of org.talend.core.model.update.UpdateResult in project tdi-studio-se by Talend.
the class UpdateManagerUtils method checkandRefreshProcess.
/**
* DOC hyWang Comment method "checkandRefreshProcess".
*
* @param results
*/
private static void checkandRefreshProcess(final List<UpdateResult> results) {
for (UpdateResult result : results) {
if (result.isJoblet() && !result.isChecked()) {
continue;
}
if (result.getJob() instanceof IProcess2) {
IProcess2 process = (IProcess2) result.getJob();
process.checkProcess();
}
}
}
use of org.talend.core.model.update.UpdateResult in project tdi-studio-se by Talend.
the class UpdateManagerUtils method doExecuteUpdates.
private static boolean doExecuteUpdates(final List<UpdateResult> results, final boolean updateAllJobs) {
if (results == null || results.isEmpty()) {
return false;
}
try {
IWorkspaceRunnable op = new IWorkspaceRunnable() {
@Override
public void run(IProgressMonitor monitor) throws CoreException {
monitor.setCanceled(false);
int size = (results.size() * 2 + 1) * UpdatesConstants.SCALE;
//$NON-NLS-1$
monitor.beginTask(Messages.getString("UpdateManagerUtils.Update"), size);
ProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
// first list by job we need to update
Map<String, Set<String>> jobIdToVersion = new HashMap<String, Set<String>>();
Map<String, Boolean> jobIdClosed = new HashMap<String, Boolean>();
for (UpdateResult result : results) {
// if (!result.isChecked()) {
// continue;
// }
String id = result.getObjectId();
String version = result.getObjectVersion();
if (id == null) {
if (result.getJob() != null && result.getJob() instanceof IProcess) {
IProcess process = (IProcess) result.getJob();
if (process instanceof IProcess2 && ERepositoryStatus.LOCK_BY_OTHER.equals(factory.getStatus(((IProcess2) process).getProperty().getItem()))) {
// file.
continue;
}
id = process.getId();
version = process.getVersion();
result.setObjectId(id);
result.setObjectVersion(version);
} else {
continue;
}
}
Set<String> versionList;
if (!jobIdToVersion.containsKey(id)) {
versionList = new HashSet<String>();
jobIdToVersion.put(id, versionList);
} else {
versionList = jobIdToVersion.get(id);
}
versionList.add(version);
//$NON-NLS-1$
jobIdClosed.put(id + " - " + version, result.isFromItem());
}
// now will execute updates only for the job selected depends this list.
for (String currentId : jobIdToVersion.keySet()) {
for (String version : jobIdToVersion.get(currentId)) {
IRepositoryViewObject currentObj = null;
//$NON-NLS-1$
boolean closedItem = jobIdClosed.get(currentId + " - " + version);
IProcess process = null;
Item item = null;
if (closedItem) {
// if item is closed, then just load it.
boolean checkOnlyLastVersion = Boolean.parseBoolean(DesignerPlugin.getDefault().getPreferenceStore().getString(//$NON-NLS-1$
"checkOnlyLastVersion"));
try {
if (checkOnlyLastVersion || version == null) {
currentObj = factory.getLastVersion(currentId);
} else {
List<IRepositoryViewObject> allVersion = factory.getAllVersion(currentId);
for (IRepositoryViewObject obj : allVersion) {
if (obj.getVersion().equals(version)) {
currentObj = obj;
}
}
}
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
if (currentObj == null) {
// item not found, don't do anything
continue;
}
item = currentObj.getProperty().getItem();
IDesignerCoreService designerCoreService = CorePlugin.getDefault().getDesignerCoreService();
if (item instanceof ProcessItem) {
process = designerCoreService.getProcessFromProcessItem((ProcessItem) item);
} else if (item instanceof JobletProcessItem) {
process = designerCoreService.getProcessFromJobletProcessItem((JobletProcessItem) item);
}
}
for (UpdateResult result : results) {
// }
if (!StringUtils.equals(currentId, result.getObjectId())) {
// not the current job we need to update
continue;
}
if (closedItem) {
if (result.getJob() == null) {
result.setJob(process);
} else {
process = (IProcess) result.getJob();
}
IUpdateItemType jobletContextType = UpdateManagerProviderDetector.INSTANCE.getUpdateItemType(UpdateManagerHelper.TYPE_JOBLET_CONTEXT);
if (process != null && jobletContextType != null && (jobletContextType.equals(result.getUpdateType()))) {
if ((result.getParameter() instanceof List) && process.getContextManager() != null) {
process.getContextManager().setListContext((List<IContext>) result.getParameter());
}
}
}
// execute
executeUpdate(result, monitor, updateAllJobs);
if (closedItem) {
result.setJob(null);
}
}
boolean isTestContainer = false;
ITestContainerProviderService testContainerService = null;
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
testContainerService = (ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(ITestContainerProviderService.class);
if (testContainerService != null) {
isTestContainer = testContainerService.isTestContainerItem(item);
}
}
if (closedItem && process instanceof IProcess2) {
IProcess2 process2 = (IProcess2) process;
ProcessType processType;
try {
processType = process2.saveXmlFile(false);
if (isTestContainer) {
testContainerService.setTestContainerProcess(processType, item);
} else if (item instanceof JobletProcessItem) {
((JobletProcessItem) item).setJobletProcess((JobletProcess) processType);
} else {
((ProcessItem) item).setProcess(processType);
}
factory.save(item);
} catch (IOException e) {
ExceptionHandler.process(e);
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
}
if (closedItem && !ERepositoryStatus.LOCK_BY_USER.equals(factory.getStatus(item))) {
// unload item from memory, but only if this one is not locked by current user.
try {
factory.unloadResources(item.getProperty());
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
}
}
}
UpdateManagerProviderDetector.INSTANCE.postUpdate(results);
// update joblet reference
upadateJobletReferenceInfor();
final List<UpdateResult> tempResults = new ArrayList<UpdateResult>(results);
// refresh
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
refreshRelatedViewers(tempResults);
// hyWang add method checkandRefreshProcess for bug7248
checkandRefreshProcess(tempResults);
}
});
monitor.worked(1 * UpdatesConstants.SCALE);
monitor.done();
}
};
IRunnableWithProgress iRunnableWithProgress = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
try {
ISchedulingRule schedulingRule = workspace.getRoot();
workspace.run(op, schedulingRule, IWorkspace.AVOID_UPDATE, monitor);
} catch (CoreException e) {
throw new InvocationTargetException(e);
}
}
};
try {
new ProgressMonitorDialog(null).run(false, false, iRunnableWithProgress);
} catch (InvocationTargetException e) {
ExceptionHandler.process(e);
} catch (InterruptedException e) {
}
return !results.isEmpty();
} finally {
results.clear();
}
}
use of org.talend.core.model.update.UpdateResult in project tdi-studio-se by Talend.
the class UpdateJobletNodeCommand method needPropagate.
private boolean needPropagate(Node jobletNode) {
List<IProcess2> openedProcesses = UpdateManagerUtils.getOpenedProcess();
boolean opened = false;
for (IProcess2 process : openedProcesses) {
if (process.getId().equals(jobletNode.getProcess().getId())) {
opened = true;
}
}
if (!opened) {
return false;
}
AbstractProcessProvider jobletProcessProvider = AbstractProcessProvider.findProcessProviderFromPID(IComponent.JOBLET_PID);
if (jobletProcessProvider != null) {
List<UpdateResult> resultList = jobletProcessProvider.checkJobletNodeSchema(jobletNode.getProcess());
if (resultList.size() <= 0) {
return false;
} else {
return true;
}
}
return false;
}
use of org.talend.core.model.update.UpdateResult in project tdi-studio-se by Talend.
the class UpdateDetectionDialog method removeDuplication.
/**
*
* ggu Comment method "removeDuplication".
*
* for context mode
*/
private void removeDuplication() {
// context mode added
List<UpdateResult> contextResult = new ArrayList<UpdateResult>();
for (UpdateResult result : getInputElements()) {
if (((result.getUpdateType() == EUpdateItemType.CONTEXT && result.getContextModeConnectionItem() != null) || result.getUpdateType() == EUpdateItemType.CONTEXT_GROUP) && result.getResultType() == EUpdateResult.ADD) {
contextResult.add(result);
}
}
// filter
List<ConnectionItem> connItems = new ArrayList<ConnectionItem>();
List<UpdateResult> duplicatedResult = new ArrayList<UpdateResult>();
Iterator<UpdateResult> iterator = contextResult.iterator();
List tempItems = new ArrayList();
List<String> contextGroups = new ArrayList<String>();
while (iterator.hasNext()) {
Map<Object, ConnectionItem> jobAndContext = new HashMap<Object, ConnectionItem>();
UpdateResult result = iterator.next();
if (result.getUpdateType() == EUpdateItemType.CONTEXT) {
ConnectionItem item = result.getContextModeConnectionItem();
jobAndContext.put(result.getJob(), item);
if (tempItems.contains(jobAndContext)) {
// duplicate
duplicatedResult.add(result);
} else {
tempItems.add(item);
}
} else if (result.getUpdateType() == EUpdateItemType.CONTEXT_GROUP) {
if (contextGroups.contains(result.getJobInfor())) {
duplicatedResult.add(result);
} else {
contextGroups.add(result.getJobInfor());
}
}
}
// remove
getInputElements().removeAll(duplicatedResult);
}
use of org.talend.core.model.update.UpdateResult in project tdi-studio-se by Talend.
the class UpdateDetectionDialog method checkInitialSelections.
private void checkInitialSelections() {
for (UpdateResult result : getInputElements()) {
if (!result.isFromItem()) {
result.setChecked(true);
}
// result.setChecked(true);
if (result.isReadOnlyProcess()) {
result.setChecked(false);
this.isJobReadOnly = true;
}
switch(result.getResultType()) {
case RENAME:
this.canCancel = false;
this.canDeselect = false;
case RELOAD:
case PATH_UPDATE:
case JOBLET_UPDATE:
this.canCancel = false;
this.canDeselect = true;
return;
default:
this.canCancel = true;
this.canDeselect = true;
}
}
}
Aggregations