// ============================================================================ // // 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.actions.view; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.xsd.XSDElementDeclaration; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.ItemState; import org.talend.core.model.properties.PropertiesFactory; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.mdm.repository.core.IServerObjectRepositoryType; import org.talend.mdm.repository.core.impl.view.IViewNodeConstDef; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmproperties.ContainerItem; import org.talend.mdm.repository.model.mdmproperties.MdmpropertiesFactory; import org.talend.mdm.repository.model.mdmproperties.WSViewItem; import org.talend.mdm.repository.model.mdmserverobject.MdmserverobjectFactory; import org.talend.mdm.repository.model.mdmserverobject.WSBooleanE; import org.talend.mdm.repository.model.mdmserverobject.WSViewE; import org.talend.mdm.repository.ui.actions.AbstractSimpleAddAction; import org.talend.mdm.repository.ui.dialogs.ViewInputDialog2; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.RepositoryTransformUtil; import org.talend.mdm.repository.utils.ValidateUtil; /** * DOC class global comment. Detailled comment <br/> * */ public class NewViewAction extends AbstractSimpleAddAction implements IViewNodeConstDef { private XSDElementDeclaration decl; public XSDElementDeclaration getXSDElementDeclaration() { return this.decl; } public NewViewAction() { super(); } @Override protected String getDialogTitle() { return Messages.NewViewAction_newView; } @Override protected void doRun() { updateParentItem(); int type = getType(); IWorkbenchPartSite site = commonViewer.getCommonNavigator().getSite(); ViewInputDialog2 vid = new ViewInputDialog2(site, getShell(), getDialogTitle(), Messages.Common_inputName, getInputValidator(), false, type); vid.setBtnShow(true); vid.create(); vid.getShell().setSize(new Point(500, 320)); vid.setBlockOnOpen(true); if (vid.open() == Window.CANCEL) { return; } String key = vid.getEntityName(); String filterName = vid.getFilterName(); Item item = null; if (filterName == null) { item = createServerObject(key); } else { String filterPart = ""; //$NON-NLS-1$ if (!filterName.isEmpty()) { filterPart = "#" + filterName; //$NON-NLS-1$ } item = createServerObject(PREFIX_VIEW_UPPER + key + filterPart); } commonViewer.refresh(selectObj); commonViewer.expandToLevel(selectObj, 1); openEditor(item); } private int getType() { int type = TYPE_VIEW; IRepositoryViewObject repositoryViewObject = (IRepositoryViewObject) selectObj; ContainerItem containerItem = (ContainerItem) repositoryViewObject.getProperty().getItem(); String path = containerItem.getState().getPath(); if (path.isEmpty()) { type = TYPE_VIEW; } else if (path.startsWith(IPath.SEPARATOR + PATH_WEBFILTER)) { type = TYPE_WEBFILTER; } else if (path.startsWith(IPath.SEPARATOR + PATH_SEARCHFILTER)) { type = TYPE_SEARCHFILTER; } return type; } @Override protected Item createServerObject(String key) { WSViewItem item = MdmpropertiesFactory.eINSTANCE.createWSViewItem(); ItemState itemState = PropertiesFactory.eINSTANCE.createItemState(); item.setState(itemState); // WSViewE view = newView(key); item.setWsView(view); int viewType = RepositoryTransformUtil.getInstance().getViewType(key); if (parentItem != null) { String path = parentItem.getState().getPath(); if (path.isEmpty()) { if (viewType == TYPE_WEBFILTER) { path = IPath.SEPARATOR + PATH_WEBFILTER; } else { path = IPath.SEPARATOR + PATH_SEARCHFILTER; } } item.getState().setPath(path); } else { if (viewType == TYPE_WEBFILTER) { item.getState().setPath(IPath.SEPARATOR + PATH_WEBFILTER); } else { item.getState().setPath(IPath.SEPARATOR + PATH_SEARCHFILTER); } } RepositoryResourceUtil.createItem(item, key); return item; } protected WSViewE newView(String key) { WSBooleanE wsBool = MdmserverobjectFactory.eINSTANCE.createWSBooleanE(); wsBool.set_true(false); WSViewE view = MdmserverobjectFactory.eINSTANCE.createWSViewE(); view.setName(key); view.setDescription(""); //$NON-NLS-1$ view.setTransformerPK(null); view.setIsTransformerActive(wsBool); return view; } public void setXSDElementDeclaration(XSDElementDeclaration decl) { this.decl = decl; } private IInputValidator getInputValidator() { return new IInputValidator() { public String isValid(String newText) { if (newText == null || newText.trim().length() == 0) { return Messages.Common_nameCanNotBeEmpty; } if (!ValidateUtil.matchViewProcessRegex(newText)) { return Messages.Common_nameInvalid; } if (RepositoryResourceUtil.isExistByName(parentItem.getRepObjType(), newText.trim())) { return Messages.Common_nameIsUsed; } return null; }; }; } public void createNewView(String viewName) { RepositoryResourceUtil.removeViewObjectPhysically(IServerObjectRepositoryType.TYPE_VIEW, viewName, null, null); createServerObject(viewName); refreshRepositoryRoot(IServerObjectRepositoryType.TYPE_VIEW); refreshRepositoryRoot(IServerObjectRepositoryType.TYPE_ROLE); } }