blob: bf61723d2cecdfd26126c5416a96b29048bf9c41 [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2004, 2008 Fraunhofer Gesellschaft, Munich, Germany,
* for its Fraunhofer Institute for Computer Architecture and Software
* Technology (FIRST), Berlin, Germany and Technical University Berlin,
* Germany.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Fraunhofer FIRST - Initial API and implementation
* Technical University Berlin - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otdt.internal.ui.wizards.listeners;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.corext.util.Messages;
import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFieldGroup;
import org.eclipse.objectteams.otdt.core.IOTType;
import org.eclipse.objectteams.otdt.core.OTModelManager;
import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
import org.eclipse.objectteams.otdt.internal.ui.wizards.NewTeamWizardPage;
import org.eclipse.objectteams.otdt.internal.ui.wizards.NewTypeWizardPage;
import org.eclipse.objectteams.otdt.internal.ui.wizards.OTNewWizardMessages;
import org.eclipse.objectteams.otdt.ui.OTDTUIPlugin;
/**
* The main listener class for org.eclipse.objectteams.otdt.internal.ui.wizards.NewTeamWizardPage.
* It listens to changes of the entry fields and clicks on the browse buttons
* of the observed NewTeamWizardPage
*
*
* @author kaschja
* @version $Id: NewTeamWizardPageListener.java 23435 2010-02-04 00:14:38Z stephan $
*/
public class NewTeamWizardPageListener extends NewTypeWizardPageListener
{
public NewTeamWizardPageListener(NewTeamWizardPage observedPage)
{
super(observedPage);
}
protected IType chooseSuperType()
{
IPackageFragmentRoot root= getObservedPage().getPackageFragmentRoot();
if (root == null)
{
return null;
}
return chooseTeam(root.getJavaProject(),
getObservedPage().getShell(),
getObservedPage().getWizard().getContainer(),
OTNewWizardMessages.NewTeamWizardPage_ChooseSuperTypeDialog_title,
OTNewWizardMessages.NewTeamWizardPage_ChooseSuperTypeDialog_description,
getObservedPage().getSuperTypeName());
}
// ------ validation --------
public IStatus[] getRelevantStates(boolean ignoreFirstField)
{
if (ignoreFirstField)
return new IStatus[] {
getObservedPage().getContainerStatus(),
_packageStatus,
_enclosingTeamStatus,
// not this one: _typeNameStatus,
_modifierStatus,
_superTypeStatus,
_superInterfacesStatus
};
else
// status of all used components
return new IStatus[]
{
getObservedPage().getContainerStatus(),
_packageStatus,
_enclosingTeamStatus,
_typeNameStatus,
_modifierStatus,
_superTypeStatus,
_superInterfacesStatus
};
}
protected IStatus validateEnclosingType()
{
IStatus status = super.validateEnclosingType();
if ( status.getSeverity() == IStatus.ERROR )
{
//deselect and disable Inlined-Checkbox
getObservedPage().getInlineSelectionDialogField().setSelection(false);
getObservedPage().getInlineSelectionDialogField().setEnabled(false);
}
handleAccessModifierButtons();
getObservedPage().updateEnableState();
return status;
}
@Override
void validateSuperClass(StatusInfo status) {
super.validateSuperClass(status);
// deselect Bindingeditor when supertype == o.o.Team
IType superType = getObservedPage().getSuperType();
if (superType == null)
return;
IOTType superTeam = OTModelManager.getOTElement(superType);
if (! superType.getFullyQualifiedName().equals(String.valueOf(IOTConstants.STR_ORG_OBJECTTEAMS_TEAM)) && superTeam != null)
{
SelectionButtonDialogFieldGroup bindingEditorGroup = ((NewTeamWizardPage)getObservedPage()).getBindingEditorButtons();
bindingEditorGroup.setEnabled(true);
}
}
protected void handleEnclosingTypeDialogFieldIsEmpty(StatusInfo status)
{
getObservedPage().getPackageDialogField().setEnabled(true);
//disable Inlined-Checkbox
getObservedPage().getInlineSelectionDialogField().setSelection(false);
getObservedPage().getInlineSelectionDialogField().setEnabled(false);
super.handleEnclosingTypeDialogFieldIsEmpty(status);
}
protected void handleAccessModifierButtons()
{
SelectionButtonDialogFieldGroup modifierButtons = getObservedPage().getAccessModifierButtons();
if (getObservedPage().getEnclosingTypeName().equals("")) //$NON-NLS-1$
{
int modifiers = getObservedPage().getModifiers();
if (Flags.isPrivate(modifiers) || Flags.isProtected(modifiers))
{
modifierButtons.setSelection(NewTypeWizardPage.PRIVATE_INDEX, false);
modifierButtons.setSelection(NewTypeWizardPage.PROTECTED_INDEX, false);
modifierButtons.setSelection(NewTypeWizardPage.PUBLIC_INDEX, true);
}
modifierButtons.enableSelectionButton(NewTypeWizardPage.PRIVATE_INDEX, false);
modifierButtons.enableSelectionButton(NewTypeWizardPage.PROTECTED_INDEX, false);
}
else
{
modifierButtons.enableSelectionButton(NewTypeWizardPage.PRIVATE_INDEX, true);
modifierButtons.enableSelectionButton(NewTypeWizardPage.PROTECTED_INDEX, true);
}
}
/**
* Gets called when the package field has changed. The method
* validates the package name and returns the status of the validation.
* The validation also updates the package fragment model.
*
* @return the status of the validation
*/
protected IStatus validatePackage() {
StatusInfo status = new StatusInfo();
updatePackageStatusLabel();
getObservedPage().getPackageDialogField().enableButton(getObservedPage().getPackageFragmentRoot() != null);
String packName = getObservedPage().getPackageName();
if (packName.trim().length() > 0)
{
IStatus val = NewTypeWizardPage.validatePackageName(packName, getObservedPage().getJavaProject());
if (val.getSeverity() == IStatus.ERROR)
{
status.setError(Messages.format(NewWizardMessages.NewTypeWizardPage_error_InvalidPackageName, val.getMessage()));
return status;
}
else if (val.getSeverity() == IStatus.WARNING)
{
status.setWarning(Messages.format(NewWizardMessages.NewTypeWizardPage_warning_DiscouragedPackageName, val.getMessage()));
// continue
}
}
IPackageFragmentRoot root = getObservedPage().getPackageFragmentRoot();
if (root != null)
{
if (root.getJavaProject().exists() && packName.trim().length() > 0)
{
try
{
IPath rootPath = root.getPath();
IPath outputPath = root.getJavaProject().getOutputLocation();
if (rootPath.isPrefixOf(outputPath)
&& !rootPath.equals(outputPath))
{
// if the bin folder is inside of our root, dont allow to name a package
// like the bin folder
IPath packagePath = rootPath.append(packName.replace('.', '/'));
if (outputPath.isPrefixOf(packagePath))
{
status.setError(NewWizardMessages.NewTypeWizardPage_error_ClashOutputLocation);
return status;
}
}
}
catch (JavaModelException ex)
{
OTDTUIPlugin.logException("", ex); //$NON-NLS-1$
// let pass
}
}
getObservedPage().setPackageFragment(root.getPackageFragment(packName), true);
}
else
{
status.setError(""); //$NON-NLS-1$
}
return status;
}
protected void updatePackageStatusLabel() {
String packName = getObservedPage().getPackageName();
if (packName.length() == 0)
{
getObservedPage().getPackageDialogField().setStatus(NewWizardMessages.NewTypeWizardPage_default);
}
else
{
getObservedPage().getPackageDialogField().setStatus(""); //$NON-NLS-1$
}
}
}