// ============================================================================ // // 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; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.talend.core.model.properties.Item; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.mdm.repository.core.AbstractRepositoryAction; import org.talend.mdm.repository.core.service.ContainerCacheService; import org.talend.mdm.repository.i18n.Messages; import org.talend.mdm.repository.model.mdmproperties.ContainerItem; import org.talend.mdm.repository.utils.RepositoryResourceUtil; import org.talend.mdm.repository.utils.ValidateUtil; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; /** * DOC hbhong class global comment. Detailled comment */ public abstract class AbstractSimpleAddAction extends AbstractRepositoryAction { protected static Logger log = Logger.getLogger(AbstractSimpleAddAction.class); /** * DOC hbhong AddMenu constructor comment. * * @param text */ public AbstractSimpleAddAction() { super("New"); //$NON-NLS-1$ setImageDescriptor(ImageCache.getImage(EImage.ADD_OBJ.getPath())); } protected ContainerItem parentItem; protected Object selectObj; protected abstract String getDialogTitle(); @Override protected void doRun() { updateParentItem(); String key = getInputName(); if (key != null) { Item item = createServerObject(key); getCommonViewer().refresh(selectObj); getCommonViewer().expandToLevel(selectObj, 1); if (runOpenActionAfterCreation(item)) { openEditor(item); } } } protected String getInputName() { InputDialog dlg = new InputDialog(getShell(), getDialogTitle(), Messages.Common_inputName, null, new IInputValidator() { public String isValid(String newText) { if (newText == null || newText.trim().length() == 0) { return Messages.Common_nameCanNotBeEmpty; } if (!ValidateUtil.matchCommonRegex(newText)) { return Messages.Common_nameInvalid; } if (RepositoryResourceUtil.isExistByName(parentItem.getRepObjType(), newText.trim())) { return Messages.Common_nameIsUsed; } return null; }; }) { @Override protected Control createDialogArea(Composite parent) { Control area = super.createDialogArea(parent); extendDialogArea(area); return area; } }; dlg.setBlockOnOpen(true); if (dlg.open() == Window.CANCEL) { return null; } String key = dlg.getValue(); return key; } protected void extendDialogArea(Control area) { } protected void updateParentItem() { parentItem = null; if (!getSelectedObject().isEmpty()) { selectObj = getSelectedObject().get(0); if (selectObj instanceof IRepositoryViewObject) { Item pItem = ((IRepositoryViewObject) selectObj).getProperty().getItem(); if (pItem instanceof ContainerItem) { parentItem = (ContainerItem) pItem; } } } } public void setParentItem(ContainerItem parentItem) { this.parentItem = parentItem; } protected boolean runOpenActionAfterCreation(Item item) { return true; } protected void openEditor(Item item) { if (item == null) { return; } IRepositoryViewObject viewObject = ContainerCacheService.get(item.getProperty()); OpenObjectAction action = new OpenObjectAction(); List<Object> selObjects = new ArrayList<Object>(); selObjects.add(viewObject); action.setSelObjects(selObjects); action.run(); } protected abstract Item createServerObject(String key); @Override public String getGroupName() { return GROUP_EDIT; } @Override public boolean isVisible(IRepositoryViewObject viewObj) { if (getSelectedObject().size() > 1) { return false; } return super.isVisible(viewObj); } }