/**
* Copyright (C) 2011, Starschema Ltd. <info at starschema.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
package org.talend.repository.sapwizard.actions;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.runtime.image.ECoreImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.core.model.properties.SAPConnectionItem;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.RepositoryManager;
import org.talend.core.model.repository.RepositoryObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.repository.ui.actions.metadata.AbstractCreateAction;
import org.talend.core.ui.images.OverlayImageProvider;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryNode.EProperties;
import org.talend.repository.model.RepositoryNode;
import org.talend.repository.sap.i18n.Messages;
import org.talend.repository.sapwizard.ui.wizard.SapWizard;
/**
* @author Ammu
*
*/
public class CreateSAPConnectionAction extends AbstractCreateAction {
private static final String EDIT_LABEL = Messages.getString("CreateSAPConnectionAction.Action.EditTitle"); //$NON-NLS-1$
private static final String OPEN_LABEL = Messages.getString("CreateSAPConnectionAction.Action.OpenTitle"); //$NON-NLS-1$
private static final String CREATE_LABEL = Messages.getString("CreateSAPConnectionAction.Action.CreateTitle"); //$NON-NLS-1$
private ImageDescriptor defaultImage = ImageProvider.getImageDesc(ECoreImage.METADATA_CONNECTION_ICON);
private ImageDescriptor createImage = OverlayImageProvider.getImageWithNew(ImageProvider.getImage(ECoreImage.METADATA_CONNECTION_ICON));
/**
*
*/
public CreateSAPConnectionAction() {
super();
this.setText(CREATE_LABEL);
this.setToolTipText(CREATE_LABEL);
this.setImageDescriptor(defaultImage);
}
/**
* @param isToolbar
*/
public CreateSAPConnectionAction(boolean isToolbar) {
super();
this.setToolbar(isToolbar);
this.setText(CREATE_LABEL);
this.setToolTipText(CREATE_LABEL);
this.setImageDescriptor(defaultImage);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void doRun() {
if (this.repositoryNode == null) {
repositoryNode = getCurrentRepositoryNode();
}
if (isToolbar()) {
if (repositoryNode != null && repositoryNode.getContentType() != ERepositoryObjectType.METADATA_CONNECTIONS) {
repositoryNode = null;
}
if (repositoryNode == null) {
repositoryNode = getRepositoryNodeForDefault(ERepositoryObjectType.METADATA_CONNECTIONS);
}
}
RepositoryManager.getRepositoryView().refresh();
RepositoryNode metadataNode = repositoryNode.getParent();
if (metadataNode != null) {
getViewPart().setFocus();
getViewPart().expand(metadataNode, true);
getViewPart().expand(repositoryNode, true);
}
if (repositoryNode.getObject() != null && repositoryNode.getObject().getClass().equals(RepositoryObject.class)) {
try {
((RepositoryObject) repositoryNode.getObject()).setProperty(ProxyRepositoryFactory.getInstance().getUptodateProperty(
repositoryNode.getObject().getProperty()));
} catch (PersistenceException e) {
ExceptionHandler.process(e);
}
}
RepositoryNode node = repositoryNode;
if (!isToolbar()) {
Object userSelection = ((IStructuredSelection) getSelection()).getFirstElement();
if (userSelection instanceof RepositoryNode) {
switch (((RepositoryNode) userSelection).getType()) {
case REPOSITORY_ELEMENT:
case SIMPLE_FOLDER:
case SYSTEM_FOLDER:
node = (RepositoryNode) userSelection;
break;
}
}
}
boolean creation = false;
switch (node.getType()) {
case REPOSITORY_ELEMENT:
creation = false;
break;
case SIMPLE_FOLDER:
creation = true;
break;
case SYSTEM_FOLDER:
creation = true;
break;
}
SapWizard repositoryWizard = new SapWizard(PlatformUI.getWorkbench(), creation, node, getExistingNames());
WizardDialog wizardDialog = new WizardDialog(Display.getCurrent().getActiveShell(), repositoryWizard);
wizardDialog.setPageSize(600, 500);
wizardDialog.create();
wizardDialog.open();
RepositoryManager.refreshSavedNode(node);
}
@Override
protected void init(RepositoryNode node) {
ERepositoryObjectType nodeType = (ERepositoryObjectType) node.getProperties(EProperties.CONTENT_TYPE);
if (!ERepositoryObjectType.METADATA_SAPCONNECTIONS.equals(nodeType)) {
setEnabled(false);
return;
}
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
switch (node.getType()) {
case SIMPLE_FOLDER:
case SYSTEM_FOLDER:
if (factory.isUserReadOnlyOnCurrentProject() || !ProjectManager.getInstance().isInCurrentMainProject(node)) {
setEnabled(false);
return;
}
if (node.getObject() != null && node.getObject().getProperty().getItem().getState().isDeleted()) {
setEnabled(false);
return;
}
this.setText(CREATE_LABEL);
this.setImageDescriptor(createImage);
collectChildNames(node);
break;
case REPOSITORY_ELEMENT:
if (factory.isPotentiallyEditable(node.getObject()) && isLastVersion(node)) {
this.setText(EDIT_LABEL);
this.setImageDescriptor(defaultImage);
collectSiblingNames(node);
} else {
this.setText(OPEN_LABEL);
this.setImageDescriptor(defaultImage);
}
break;
default:
return;
}
setEnabled(true);
}
@Override
public Class<SAPConnectionItem> getClassForDoubleClick() {
return SAPConnectionItem.class;
}
}