blob: c3caaf3efc247084f55e33ad4f89590e357dd1f7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
******************************************************************************/
package org.eclipse.scout.sdk.ui.wizard.keystroke;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.scout.sdk.Texts;
import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
import org.eclipse.scout.sdk.extensions.runtime.classes.RuntimeClasses;
import org.eclipse.scout.sdk.operation.KeyStrokeNewOperation;
import org.eclipse.scout.sdk.ui.fields.StyledTextField;
import org.eclipse.scout.sdk.ui.fields.proposal.ContentProposalEvent;
import org.eclipse.scout.sdk.ui.fields.proposal.IProposalAdapterListener;
import org.eclipse.scout.sdk.ui.fields.proposal.ProposalTextField;
import org.eclipse.scout.sdk.ui.fields.proposal.javaelement.JavaElementAbstractTypeContentProvider;
import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
import org.eclipse.scout.sdk.ui.wizard.AbstractWorkspaceWizardPage;
import org.eclipse.scout.sdk.util.ScoutUtility;
import org.eclipse.scout.sdk.util.SdkProperties;
import org.eclipse.scout.sdk.util.signature.SignatureCache;
import org.eclipse.scout.sdk.util.type.TypeUtility;
import org.eclipse.scout.sdk.util.typecache.IWorkingCopyManager;
import org.eclipse.scout.sdk.workspace.type.IStructuredType;
import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
/**
* <h3> {@link KeyStrokeNewWizardPage}</h3> ...
*/
public class KeyStrokeNewWizardPage extends AbstractWorkspaceWizardPage {
private final IType iKeyStroke = TypeUtility.getType(IRuntimeClasses.IKeyStroke);
private String m_typeName;
private IType m_superType;
private String m_keyStroke;
private StyledTextField m_typeNameField;
private StyledTextField m_keyStrokeField;
private ProposalTextField m_superTypeField;
// process members
private final IType m_declaringType;
private IType m_createdKeystroke;
private final IType m_abstractKeyStroke;
public KeyStrokeNewWizardPage(IType declaringType) {
super(KeyStrokeNewWizardPage.class.getName());
setTitle(Texts.get("NewKeyStroke"));
setDescription(Texts.get("CreateANewKeyStroke"));
// default
m_declaringType = declaringType;
m_abstractKeyStroke = RuntimeClasses.getSuperType(IRuntimeClasses.IKeyStroke, m_declaringType.getJavaProject());
m_superType = m_abstractKeyStroke;
}
@Override
protected void createContent(Composite parent) {
m_typeNameField = getFieldToolkit().createStyledTextField(parent, Texts.get("TypeName"));
m_typeNameField.setReadOnlySuffix(SdkProperties.SUFFIX_KEY_STROKE);
m_typeNameField.setText(m_typeName);
m_typeNameField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
m_typeName = m_typeNameField.getText();
pingStateChanging();
}
});
m_superTypeField = getFieldToolkit().createJavaElementProposalField(parent, Texts.get("SuperType"),
new JavaElementAbstractTypeContentProvider(iKeyStroke, m_declaringType.getJavaProject(), m_abstractKeyStroke));
m_superTypeField.acceptProposal(m_superType);
m_superTypeField.addProposalAdapterListener(new IProposalAdapterListener() {
@Override
public void proposalAccepted(ContentProposalEvent event) {
m_superType = (IType) event.proposal;
pingStateChanging();
}
});
m_keyStrokeField = getFieldToolkit().createStyledTextField(parent, Texts.get("KeyStroke"));
m_keyStrokeField.setText(getKeyStroke());
m_keyStrokeField.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
m_keyStroke = m_keyStrokeField.getText();
pingStateChanging();
}
});
// layout
parent.setLayout(new GridLayout(1, true));
m_typeNameField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
m_superTypeField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
m_keyStrokeField.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
}
@Override
public boolean performFinish(IProgressMonitor monitor, IWorkingCopyManager workingCopyManager) throws CoreException {
// write back members
KeyStrokeNewOperation op = new KeyStrokeNewOperation(getTypeName(), getDeclaringType());
IType superTypeProp = getSuperType();
if (superTypeProp != null) {
op.setSuperTypeSignature(SignatureCache.createTypeSignature(superTypeProp.getFullyQualifiedName()));
}
op.setKeyStroke(getKeyStroke());
// sibling
IStructuredType structuredType = ScoutTypeUtility.createStructuredForm(m_declaringType);
op.setSibling(structuredType.getSiblingTypeKeyStroke(getTypeName()));
op.run(monitor, workingCopyManager);
m_createdKeystroke = op.getCreatedKeyStroke();
return true;
}
@Override
protected void validatePage(MultiStatus multiStatus) {
try {
multiStatus.add(getStatusNameField());
multiStatus.add(getStatusSuperType());
}
catch (JavaModelException e) {
ScoutSdkUi.logError("could not validate name field.", e);
}
}
protected IStatus getStatusNameField() throws JavaModelException {
IStatus javaFieldNameStatus = ScoutUtility.validateJavaName(getTypeName(), SdkProperties.SUFFIX_KEY_STROKE);
if (javaFieldNameStatus.getSeverity() > IStatus.WARNING) {
return javaFieldNameStatus;
}
if (TypeUtility.exists(getDeclaringType().getType(getTypeName()))) {
return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("Error_nameAlreadyUsed"));
}
return javaFieldNameStatus;
}
protected IStatus getStatusSuperType() throws JavaModelException {
if (getSuperType() == null) {
return new Status(IStatus.ERROR, ScoutSdkUi.PLUGIN_ID, Texts.get("TheSuperTypeCanNotBeNull"));
}
return Status.OK_STATUS;
}
/**
* @return the createdKeystroke
*/
public IType getCreatedKeystroke() {
return m_createdKeystroke;
}
public IType getDeclaringType() {
return m_declaringType;
}
public String getTypeName() {
return m_typeName;
}
public void setTypeName(String typeName) {
try {
setStateChanging(true);
m_typeName = typeName;
if (isControlCreated()) {
m_typeNameField.setText(typeName);
}
}
finally {
setStateChanging(false);
}
}
public IType getSuperType() {
return m_superType;
}
public void setSuperType(IType superType) {
try {
setStateChanging(true);
m_superType = superType;
if (isControlCreated()) {
m_superTypeField.acceptProposal(superType);
}
}
finally {
setStateChanging(false);
}
}
public void setKeyStroke(String keyStroke) {
try {
setStateChanging(true);
m_keyStroke = keyStroke;
if (isControlCreated()) {
m_keyStrokeField.setText(keyStroke);
}
}
finally {
setStateChanging(false);
}
}
public String getKeyStroke() {
return m_keyStroke;
}
}