// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.mdm.repository.ui.wizards.imports; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.navigator.CommonViewer; import org.eclipse.ui.progress.UIJob; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.utils.VersionUtils; import org.talend.core.model.properties.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.runtime.CoreRuntimePlugin; import org.talend.mdm.repository.core.IRepositoryNodeConfiguration; import org.talend.mdm.repository.core.IServerObjectRepositoryType; import org.talend.mdm.repository.core.command.CommandManager; import org.talend.mdm.repository.core.impl.transformerV2.ITransformerV2NodeConsDef; import org.talend.mdm.repository.core.impl.view.IViewNodeConstDef; import org.talend.mdm.repository.core.service.ImportService; import org.talend.mdm.repository.core.service.RepositoryQueryService; import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef; import org.talend.mdm.repository.model.mdmproperties.MDMServerObjectItem; import org.talend.mdm.repository.model.mdmserverobject.MDMServerObject; import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectFactory; import org.talend.mdm.repository.model.mdmserverobject.WSResourceE; import org.talend.mdm.repository.ui.dialogs.lock.LockedObjectDialog; import org.talend.mdm.repository.ui.wizards.imports.viewer.TreeObjectCheckTreeViewer; import org.talend.mdm.repository.utils.Bean2EObjUtil; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.RepositoryTransformUtil; import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog; import org.talend.repository.model.IProxyRepositoryFactory; import com.amalto.workbench.exadapter.ExAdapterManager; import com.amalto.workbench.models.TreeObject; import com.amalto.workbench.models.TreeParent; import com.amalto.workbench.providers.XtentisServerObjectsRetriever; import com.amalto.workbench.utils.HttpClientUtil; import com.amalto.workbench.utils.Util; import com.amalto.workbench.widgets.LabelCombo; import com.amalto.workbench.widgets.WidgetFactory; /** * DOC achen class global comment. Detailled comment */ public class ImportServerObjectWizard extends Wizard { private static final String UTF8 = "UTF-8"; //$NON-NLS-1$ static Logger log = Logger.getLogger(ImportServerObjectWizard.class); private TreeObjectCheckTreeViewer treeViewer; private TreeObject serverRoot; private MDMServerDef serverDef; private LabelCombo comboVersion; private Text txtServer; WidgetFactory toolkit = WidgetFactory.getWidgetFactory(); CommonViewer commonViewer; boolean isOverrideAll = true; private Button btnOverwrite; private Object[] selectedObjects; public ImportServerObjectWizard(CommonViewer commonViewer) { setNeedsProgressMonitor(true); this.commonViewer = commonViewer; exAdapter = ExAdapterManager.getAdapter(this, IImportServerObjectWizardExAdapter.class); } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.Wizard#performFinish() */ @Override public boolean performFinish() { if (!showLockedObjDialog(selectedObjects)) { return false; } try { if (selectedObjects != null) { doImport(); } } catch (InvocationTargetException e) { log.error(e); return false; } catch (InterruptedException e) { log.error(e); return false; } return true; } private void updateSelectedObjects() { selectedObjects = treeViewer.getCheckNodes(); } private int isOveride(String name, String obTypeName) { final MessageDialog dialog = new MessageDialog(getShell(), Messages.Confirm_Overwrite, null, Messages.bind( Messages.Confirm_Overwrite_Info, obTypeName, name), MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0); dialog.open(); int result = dialog.getReturnCode(); if (result == 0) { return IDialogConstants.YES_ID; } if (result == 1) { return IDialogConstants.YES_TO_ALL_ID; } if (result == 2) { return IDialogConstants.NO_ID; } return IDialogConstants.CANCEL_ID; } Pattern picFileNamePattern = Pattern.compile("(.*?)-(.*)\\.(.*?)"); //$NON-NLS-1$ Pattern picFileVersionPattern = Pattern.compile("(.*)_(\\d+\\.\\d+)"); //$NON-NLS-1$ private IImportServerObjectWizardExAdapter exAdapter; /** * DOC hbhong Comment method "getFileInfo". * * @param input * @return // dirName result[0] // fileQName result[1] // fileExtension result[2] // fileName result[3] // version * result[4] */ private String[] getPicResourceFileInfo(String input) { Matcher m = picFileNamePattern.matcher(input); if (m.matches()) { String[] result = new String[5]; // dirName result[0] = m.group(1); // fileQName result[1] = m.group(2); // fileExtension result[2] = m.group(3); // fileName result[3] = result[1]; // version result[4] = VersionUtils.DEFAULT_VERSION; Matcher versionM = picFileVersionPattern.matcher(result[1]); if (versionM.matches()) { // fileName result[3] = versionM.group(1); // version result[4] = versionM.group(2); } return result; } else { return null; } } private MDMServerObject handleSpecialTreeObject(TreeObject treeObj) throws IOException { int type = treeObj.getType(); if (type == TreeObject.PICTURES_RESOURCE) { return handlePictureResourceObject(treeObj); } if (type == TreeObject.WORKFLOW_PROCESS) { if (exAdapter != null) { return exAdapter.handleWorkflowObject(treeObj); } } return null; } /** * DOC hbhong Comment method "handlePictureResourceObject". * * @param treeObj * @throws IOException */ private WSResourceE handlePictureResourceObject(TreeObject treeObj) throws IOException { if (treeObj != null) { if (treeObj instanceof TreeParent) { return null; } String[] fileInfo = getPicResourceFileInfo(treeObj.getName()); if (fileInfo != null) { String dirName = fileInfo[0]; String fileQName = fileInfo[1]; String fileExtension = fileInfo[2]; String fileName = fileInfo[3]; // encode the dirName and fileName String encodedDirName = URLEncoder.encode(dirName, UTF8); fileQName = URLEncoder.encode(fileQName, UTF8); WSResourceE resource = MdmserverobjectFactory.eINSTANCE.createWSResourceE(); resource.setName(fileName); resource.setFileExtension(fileExtension); StringBuffer strBuf = new StringBuffer(); strBuf.append(serverDef.getProtocol()) .append(serverDef.getHost()) .append(":").append(serverDef.getPort()) //$NON-NLS-1$ .append(Util.getContextPath(serverDef.getPath())) .append("/services/imageserver/upload/").append(encodedDirName).append("/").append(fileQName).append(".").append(fileExtension); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String url = strBuf.toString(); byte[] bytes = HttpClientUtil.downloadFile(url, serverDef.getUser(), serverDef.getPasswd()); resource.setFileContent(bytes); // add imageCatalog resource.setImageCatalog(dirName); treeObj.setName(fileName); return resource; } } return null; } private boolean showLockedObjDialog(Object[] objs) { if (objs == null) { return true; } List<IRepositoryViewObject> viewObjs = new LinkedList<IRepositoryViewObject>(); boolean forceContinueResetOperation = false; Map<IRepositoryViewObject, TreeObject> objMap = new HashMap<IRepositoryViewObject, TreeObject>(); for (Object obj : objs) { TreeObject treeObj = (TreeObject) obj; if (treeObj != null && treeObj instanceof TreeParent) { continue; } String treeObjName = treeObj.getName(); ERepositoryObjectType type = RepositoryQueryService.getRepositoryObjectType(treeObj.getType()); if (type != null && treeObjName != null) { String uniqueName = getUniqueName(treeObj, treeObjName); IRepositoryViewObject viewObject = RepositoryResourceUtil.findViewObjectByName(type, uniqueName); if (viewObject != null) { viewObjs.add(viewObject); objMap.put(viewObject, treeObj); } else { // not exist in local forceContinueResetOperation = true; } } } LockedObjectDialog lockDialog = new LockedObjectDialog(getShell(), Messages.ImportServerObjectWizard_lockedObjectMessage, Messages.ImportServerObjectWizard_cancelImportingObjectMessage, viewObjs, forceContinueResetOperation); if (lockDialog.needShowDialog()) { int open = lockDialog.open(); if (open == IDialogConstants.OK_ID) { if (lockDialog.canContinueRestOperation()) { selectedObjects = lockDialog.getUnlockedTreeObject(selectedObjects, objMap); return true; } } return false; } return true; } public List<String> doImport(Object[] objs, IProgressMonitor monitor) { monitor.beginTask(Messages.Import_Objects, objs.length); List<String> importedIds = new LinkedList<String>(); ImportService.setImporting(true); List<Integer> types = new ArrayList<Integer>(); types.add(TreeObject.CUSTOM_FORM); types.add(TreeObject.DATA_CLUSTER); types.add(TreeObject.DATA_MODEL); types.add(TreeObject.TRANSFORMER); types.add(TreeObject.ROUTING_RULE); types.add(TreeObject.MENU); types.add(TreeObject.ROLE); types.add(TreeObject.STORED_PROCEDURE); types.add(TreeObject.VIEW); types.add(TreeObject.WORKFLOW_PROCESS); IProxyRepositoryFactory factory = CoreRuntimePlugin.getInstance().getProxyRepositoryFactory(); for (Object obj : objs) { try { TreeObject treeObj = (TreeObject) obj; monitor.subTask(treeObj.getDisplayName()); String treeObjName = treeObj.getName(); MDMServerObject eobj = handleSpecialTreeObject(treeObj); if (treeObj.getType() == TreeObject.WORKFLOW_PROCESS) { continue; } if (eobj == null) { if (!types.contains(treeObj.getType()) || treeObj.getWsObject() == null || ("JCAAdapers".equals(treeObj.getName()) && treeObj.getType() == TreeObject.DATA_CLUSTER)) { //$NON-NLS-1$ continue; } eobj = (MDMServerObject) Bean2EObjUtil.getInstance().convertFromBean2EObj(treeObj.getWsObject(), null); } eobj.setLastServerName(serverDef.getName()); ERepositoryObjectType type = RepositoryQueryService.getRepositoryObjectType(treeObj.getType()); String uniqueName = getUniqueName(treeObj, treeObjName); MDMServerObjectItem item = RepositoryQueryService.findServerObjectItemByNameWithDeleted(type, uniqueName, true); if (item != null) { if (!isOverrideAll) { int result = isOveride(treeObj.getName(), TreeObject.getTypeName(treeObj.getType())); if (result == IDialogConstants.CANCEL_ID) { ImportService.setImporting(false); return importedIds; } if (result == IDialogConstants.YES_TO_ALL_ID) { isOverrideAll = true; } if (result == IDialogConstants.NO_ID) { break; } } if (!RepositoryResourceUtil.isLockedItem(item)) { try { factory.lock(item); } catch (PersistenceException e1) { log.error(e1.getMessage(), e1); } catch (LoginException e1) { log.error(e1.getMessage(), e1); } item.setMDMServerObject(eobj); item.getState().setDeleted(false); // save RepositoryResourceUtil.saveItem(item, false); try { factory.unlock(item); } catch (PersistenceException e) { log.error(e.getMessage(), e); } catch (LoginException e) { log.error(e.getMessage(), e); } importedIds.add(item.getProperty().getId()); } CommandManager.getInstance().removeCommandStack(item.getProperty().getId()); } else { IRepositoryNodeConfiguration config = RepositoryNodeConfigurationManager.getConfiguration(type); item = (MDMServerObjectItem) config.getResourceProvider().createNewItem(type); item.setMDMServerObject(eobj); ItemState itemState = PropertiesFactory.eINSTANCE.createItemState(); itemState.setPath(caculatePath(treeObj)); handlePath(itemState, type); item.setState(itemState); String version = getVersion(treeObj); if (RepositoryResourceUtil.createItem(item, uniqueName, version, false, false)) { importedIds.add(item.getProperty().getId()); } } } catch (IOException e) { log.error(e.getMessage(), e); } monitor.worked(1); } ImportService.setImporting(false); monitor.done(); return importedIds; } /** * DOC jsxie Comment method "caculatePath". if it is process or trigger ,cut the path prefix. * * @param treeObj * @return the tree object path. */ private String caculatePath(TreeObject treeObj) { if (treeObj.getType() == TreeObject.TRANSFORMER) { return getProcessTypeObjectPath(treeObj); } if (treeObj.getType() == TreeObject.ROUTING_RULE) { if (treeObj.getPath().equals("Trigger")) { //$NON-NLS-1$ return "";//$NON-NLS-1$ } else { return treeObj.getPath().substring(8); } } if (treeObj.getType() == TreeObject.VIEW) { return getViewTypeObjectPath(treeObj); } return treeObj.getPath(); } private String getProcessTypeObjectPath(TreeObject treeObj) { String path = treeObj.getPath(); String processName = treeObj.getName(); int processType = RepositoryTransformUtil.getInstance().getProcessType(processName); switch (processType) { case ITransformerV2NodeConsDef.TYPE_BEFORESAVE: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_BEFORESAVE; } else if (!path.equals(ITransformerV2NodeConsDef.PATH_PROCESS) && !path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_SMARTVIEW)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_BEFORESAVE + path.substring(8); } break; case ITransformerV2NodeConsDef.TYPE_BEFOREDEL: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_BEFOREDEL; } else if (!path.equals(ITransformerV2NodeConsDef.PATH_PROCESS) && !path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_BEFOREDEL)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_BEFOREDEL + path.substring(8); } break; case ITransformerV2NodeConsDef.TYPE_ENTITYACTION: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_ENTITYACTION; } else if (!path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_ENTITYACTION)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_ENTITYACTION + path.substring(8); } break; case ITransformerV2NodeConsDef.TYPE_WELCOMEACTION: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_WELCOMEACTION; } else if (!path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_WELCOMEACTION)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_WELCOMEACTION + path.substring(8); } break; case ITransformerV2NodeConsDef.TYPE_SMARTVIEW: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_SMARTVIEW; } else if (!path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_SMARTVIEW)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_SMARTVIEW + path.substring(8); } break; case ITransformerV2NodeConsDef.TYPE_OTHER: default: if (path.equals(ITransformerV2NodeConsDef.PATH_PROCESS)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_OTHER; } else if (!path.startsWith(IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_OTHER)) { return IPath.SEPARATOR + ITransformerV2NodeConsDef.PATH_OTHER + path.substring(8); } break; } return path.substring(8); } private String getViewTypeObjectPath(TreeObject treeObj) { if (RepositoryTransformUtil.getInstance().getViewType(treeObj.getName()) == IViewNodeConstDef.TYPE_WEBFILTER) { if (!treeObj.getPath().startsWith(IPath.SEPARATOR + IViewNodeConstDef.PATH_WEBFILTER)) { String path = treeObj.getPath(); if (path.length() > 8) { path = IPath.SEPARATOR + path.substring(8); } else if (!path.isEmpty()) { path = IPath.SEPARATOR + path; } return IPath.SEPARATOR + IViewNodeConstDef.PATH_WEBFILTER + path; } } else { if (!treeObj.getPath().startsWith(IPath.SEPARATOR + IViewNodeConstDef.PATH_SEARCHFILTER)) { String path = treeObj.getPath(); if (path.length() > 8) { path = path.substring(8); } else if (!path.isEmpty()) { path = IPath.SEPARATOR + path; } return IPath.SEPARATOR + IViewNodeConstDef.PATH_SEARCHFILTER + path; } } return treeObj.getPath(); } /** * DOC hbhong Comment method "getVersion". * * @param treeObj * @return */ private String getVersion(TreeObject treeObj) { int type = treeObj.getType(); if (type == TreeObject.PICTURES_RESOURCE) { String[] fileInfo = getPicResourceFileInfo(treeObj.getName()); if (fileInfo != null) { return fileInfo[4]; } } if (type == TreeObject.WORKFLOW_PROCESS && exAdapter != null) { return exAdapter.getWorkflowgTreeObjectVersion(treeObj); } return VersionUtils.DEFAULT_VERSION; } /** * DOC hbhong Comment method "getUniqueName". * * @param treeObj * @return */ private String getUniqueName(TreeObject treeObj, String name) { int type = treeObj.getType(); if (type == TreeObject.PICTURES_RESOURCE) { if (name == null) { name = treeObj.getName(); } String[] fileInfo = getPicResourceFileInfo(name); if (fileInfo != null) { //return fileInfo[3] + "." + fileInfo[2]; //$NON-NLS-1$ return fileInfo[3]; } } if (type == TreeObject.WORKFLOW_PROCESS && exAdapter != null) { return exAdapter.getWorkflowgTreeObjectName(treeObj); } return treeObj.getName(); } /** * DOC hbhong Comment method "handlePath". * * @param itemState * @param type */ private void handlePath(ItemState itemState, ERepositoryObjectType type) { if (type == IServerObjectRepositoryType.TYPE_RESOURCE) { itemState.setPath(""); //$NON-NLS-1$ } } class ImportProcess implements IRunnableWithProgress { public void run(final IProgressMonitor wizardMonitor) throws InvocationTargetException, InterruptedException { UIJob job = new UIJob(Messages.Import_Objects) { @Override public IStatus runInUIThread(IProgressMonitor monitor) { List<String> importedIds = doImport(selectedObjects, monitor); commonViewer.refresh(); if (exAdapter != null) { exAdapter.updateRelations(importedIds); } return Status.OK_STATUS; } }; job.schedule(); } } class RetriveProcess implements IRunnableWithProgress { /* * (non-Javadoc) * * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor m) throws InvocationTargetException, InterruptedException { String url = serverDef.getProtocol() + serverDef.getHost() + ":" + serverDef.getPort() //$NON-NLS-1$ + serverDef.getPath(); final XtentisServerObjectsRetriever retriever = new XtentisServerObjectsRetriever(serverDef.getName(), url, serverDef.getUser(), serverDef.getPasswd()); retriever.setRetriveWSObject(true); retriever.run(m); serverRoot = retriever.getServerRoot(); // if (exAdapter != null) { exAdapter.retrieverCustomForms(serverDef, (TreeParent) serverRoot, m); } // sort sortTreeObjs((TreeParent) serverRoot); // Display.getDefault().syncExec(new Runnable() { public void run() { try { treeViewer.setRoot((TreeParent) serverRoot); treeViewer.initInput(serverDef); } catch (Exception e) { log.error(e.getMessage(), e); } } }); } private void sortTreeObjs(TreeParent serverRoot) { Collections.sort(serverRoot.getChildrenList(), new Comparator() { public int compare(Object o1, Object o2) { String name1 = ((TreeObject) o1).getDisplayName(); String name2 = ((TreeObject) o2).getDisplayName(); return name1.compareTo(name2); } }); } } @Override public void addPages() { addPage(new SelectItemsPage()); } private void doImport() throws InvocationTargetException, InterruptedException { getContainer().run(true, false, new ImportProcess()); } public void retriveServerRoot() { if (serverDef != null) { try { getContainer().run(true, false, new RetriveProcess()); } catch (InvocationTargetException e) { if (!Util.handleConnectionException(getShell(), e.getTargetException(), null)) { MessageDialog.openWarning(getShell(), Messages.Common_Warning, Messages.AbstractDataClusterAction_ConnectFailed); } log.error(e); } catch (InterruptedException e) { MessageDialog.openWarning(getShell(), Messages.Common_Warning, Messages.AbstractDataClusterAction_ConnectFailed); log.error(e); } } } class SelectItemsPage extends WizardPage { protected SelectItemsPage() { super("SelectServerPage"); //$NON-NLS-1$ setTitle(Messages.ImportServerObject); // Page isn't complete until an e-mail address has been added // setPageComplete(false); } public void checkCompleted() { // && (selectedObjects != null && selectedObjects.length > 0) if (txtServer.getText().length() > 0 && (selectedObjects != null && selectedObjects.length > 0)) { setPageComplete(true); } else { setPageComplete(false); } } public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.BORDER); composite.setLayout(new GridLayout(4, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); setControl(composite); Group serverGroup = new Group(composite, SWT.NORMAL); serverGroup.setText(Messages.Select_Server); serverGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); serverGroup.setLayout(new GridLayout(2, false)); // serverGroup.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_WHITE)); txtServer = new Text(serverGroup, SWT.BORDER); txtServer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Button btnSel = new Button(serverGroup, SWT.PUSH); btnSel.setText("..."); //$NON-NLS-1$ btnSel.setToolTipText(Messages.Select_Server); txtServer.setEnabled(false); btnSel.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected(SelectionEvent e) { SelectServerDefDialog dlg = new SelectServerDefDialog(getShell()); if (dlg.open() == IDialogConstants.OK_ID) { serverDef = dlg.getSelectedServerDef(); if (serverDef == null) { return; } txtServer.setText(serverDef.getName()); retriveServerRoot(); } treeViewer.refresh(); updateSelectedObjects(); checkCompleted(); } }); // create viewer treeViewer = new TreeObjectCheckTreeViewer((TreeParent) serverRoot); treeViewer.addButtonSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { updateSelectedObjects(); checkCompleted(); } }); Composite itemcom = treeViewer.createItemList(composite); treeViewer.getViewer().setInput(null); itemcom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 5)); treeViewer.setItemText(Messages.Select_Items_To_Imports); CheckboxTreeViewer checkboxViewer = (CheckboxTreeViewer) treeViewer.getViewer(); checkboxViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent checkstatechangedevent) { updateSelectedObjects(); checkCompleted(); } }); treeViewer.getViewer().addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof TreeObject) { int type = ((TreeObject) element).getType(); if (type == 26 || type == 24 || type == 25) { return false; } } return true; } }); final Button showTimeColumnBun = new Button(composite, SWT.CHECK); showTimeColumnBun.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 4, 1)); showTimeColumnBun.setText(Messages.ConsistencyConflict_showTimeStampColumn); showTimeColumnBun.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { treeViewer.showTimeStampColumns(showTimeColumnBun.getSelection()); } }); btnOverwrite = new Button(composite, SWT.CHECK); btnOverwrite.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { isOverrideAll = btnOverwrite.getSelection(); treeViewer.setOverWrite(isOverrideAll); treeViewer.getViewer().refresh(); } }); btnOverwrite.setText(Messages.Overwrite_Exists_Items); btnOverwrite.setSelection(true); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).hint(920, 600).applyTo(composite); } } }