blob: b5b115560f1c91b0f229f96e87d017c8a4bdfd29 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.application.internal.operations;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IPathVariableManager;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEUtilityJarListImportDataModelProperties;
import org.eclipse.jst.j2ee.internal.earcreation.EARCreationResourceHandler;
import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelProvider;
import org.eclipse.wst.common.frameworks.datamodel.DataModelPropertyDescriptor;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.frameworks.datamodel.IDataModelOperation;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
/**
* @author mdelder
*
*/
public class J2EEUtilityJarListImportDataModelProvider extends AbstractDataModelProvider implements IJ2EEUtilityJarListImportDataModelProperties {
private static final Object[] EMPTY_ARRAY = new Object[0];
private String lastUserPath = null;
public J2EEUtilityJarListImportDataModelProvider() {
super();
}
@Override
public Set getPropertyNames(){
Set propertyNames = super.getPropertyNames();
propertyNames.add(EAR_PROJECT_NAME);
propertyNames.add(CREATE_PROJECT);
propertyNames.add(LINK_IMPORT);
propertyNames.add(CREATE_LINKED_PROJECT);
propertyNames.add(COPY);
propertyNames.add(BINARY_IMPORT);
propertyNames.add(UTILITY_JAR_LIST);
propertyNames.add(AVAILABLE_JARS_DIRECTORY);
propertyNames.add(PROJECT_ROOT);
propertyNames.add(OVERRIDE_PROJECT_ROOT);
propertyNames.add(OVERWRITE_IF_NECESSARY);
propertyNames.add(CREATE_LINKED_PATH_VARIABLE);
propertyNames.add(LINKED_PATH_VARIABLE);
return propertyNames;
}
@Override
public boolean propertySet(String propertyName, Object propertyValue) {
boolean notify = super.propertySet(propertyName, propertyValue);
if (AVAILABLE_JARS_DIRECTORY.equals(propertyName)) {
setProperty(UTILITY_JAR_LIST, EMPTY_ARRAY);
} else if (UTILITY_JAR_LIST.equals(propertyName)) {
if (propertyValue == null)
setProperty(UTILITY_JAR_LIST, EMPTY_ARRAY);
else
model.setProperty(UTILITY_JAR_LIST, propertyValue);
} else if (J2EEUtilityJarListImportDataModelProvider.CREATE_PROJECT.equals(propertyName) && getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_PROJECT)) {
setBooleanProperty(LINK_IMPORT, false);
setBooleanProperty(CREATE_LINKED_PROJECT, false);
setBooleanProperty(COPY, false);
model.notifyPropertyChange(BINARY_IMPORT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(OVERRIDE_PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(CREATE_LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
} else if (J2EEUtilityJarListImportDataModelProvider.LINK_IMPORT.equals(propertyName) && getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.LINK_IMPORT)) {
setBooleanProperty(CREATE_PROJECT, false);
setBooleanProperty(CREATE_LINKED_PROJECT, false);
setBooleanProperty(COPY, false);
model.notifyPropertyChange(BINARY_IMPORT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(OVERRIDE_PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(CREATE_LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
} else if (J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT.equals(propertyName) && getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT)) {
setBooleanProperty(LINK_IMPORT, false);
setBooleanProperty(CREATE_PROJECT, false);
setBooleanProperty(COPY, false);
model.notifyPropertyChange(BINARY_IMPORT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(OVERRIDE_PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(CREATE_LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
} else if (J2EEUtilityJarListImportDataModelProvider.COPY.equals(propertyName) && getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.COPY)) {
setBooleanProperty(CREATE_PROJECT, false);
setBooleanProperty(LINK_IMPORT, false);
setBooleanProperty(CREATE_LINKED_PROJECT, false);
model.notifyPropertyChange(BINARY_IMPORT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(OVERRIDE_PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(CREATE_LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
} else if (J2EEUtilityJarListImportDataModelProvider.OVERRIDE_PROJECT_ROOT.equals(propertyName)) {
if(model.getBooleanProperty(OVERRIDE_PROJECT_ROOT)){
model.setProperty(PROJECT_ROOT, lastUserPath);
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.VALUE_CHG);
}else{
lastUserPath = model.getStringProperty(PROJECT_ROOT);
model.setProperty(PROJECT_ROOT, getDefaultProperty(PROJECT_ROOT));
model.notifyPropertyChange(PROJECT_ROOT, IDataModel.VALUE_CHG);
}
} else if (J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE.equals(propertyName)) {
if (isLinkedPathVariableInvalid())
setProperty(J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE, "TEAM_SHARED_DIRECTORY"); //$NON-NLS-1$
model.notifyPropertyChange(J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE, IDataModel.ENABLE_CHG);
model.notifyPropertyChange(AVAILABLE_JARS_DIRECTORY, IDataModel.ENABLE_CHG);
} else if (J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE.equals(propertyName)) {
// will only set if necessary
setProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE, Boolean.TRUE);
if (linkedPathExists()) {
String linkedPathVariable = getStringProperty(J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE);
IPathVariableManager manager = ResourcesPlugin.getWorkspace().getPathVariableManager();
IPath availableJarsPath = manager.getValue(linkedPathVariable);
setProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE, Boolean.valueOf(availableJarsPath != null));
String availableJarsPathString = availableJarsPath == null ? null :availableJarsPath.toOSString();
if (availableJarsPathString != null && availableJarsPathString.length() > 0)
setProperty(J2EEUtilityJarListImportDataModelProvider.AVAILABLE_JARS_DIRECTORY, availableJarsPathString);
}
model.notifyPropertyChange(AVAILABLE_JARS_DIRECTORY, IDataModel.ENABLE_CHG);
}
return notify;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModel#basicIsEnabled(java.lang.String)
*/
@Override
public boolean isPropertyEnabled(String propertyName) {
if (J2EEUtilityJarListImportDataModelProvider.BINARY_IMPORT.equals(propertyName)) {
return getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_PROJECT) || getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT);
} else if (J2EEUtilityJarListImportDataModelProvider.OVERRIDE_PROJECT_ROOT.equals(propertyName)) {
return getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_PROJECT) || getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT);
} else if (J2EEUtilityJarListImportDataModelProvider.PROJECT_ROOT.equals(propertyName)) {
return (getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_PROJECT) || getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT)) && getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.OVERRIDE_PROJECT_ROOT);
} else if (J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE.equals(propertyName)) {
return (getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.LINK_IMPORT) || getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PROJECT));
} else if (J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE.equals(propertyName)) {
return getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE);
} else if (J2EEUtilityJarListImportDataModelProvider.AVAILABLE_JARS_DIRECTORY.equals(propertyName)) {
boolean createPath = getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE);
return !createPath || !linkedPathExists();
}
return super.isPropertyEnabled(propertyName);
}
private boolean linkedPathExists() {
String linkedPathVariable = getStringProperty(J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE);
if (linkedPathVariable == null || linkedPathVariable.trim().length() == 0)
return false;
IPathVariableManager manager = ResourcesPlugin.getWorkspace().getPathVariableManager();
IPath availableJarsPath = manager.getValue(linkedPathVariable);
return availableJarsPath != null;
}
private boolean isLinkedPathVariableInvalid() {
boolean createPath = getBooleanProperty(J2EEUtilityJarListImportDataModelProvider.CREATE_LINKED_PATH_VARIABLE);
String linkedPathVariable = getStringProperty(J2EEUtilityJarListImportDataModelProvider.LINKED_PATH_VARIABLE);
return (createPath && (linkedPathVariable == null || linkedPathVariable.trim().length() == 0));
}
@Override
public IDataModelOperation getDefaultOperation() {
return new J2EEUtilityJarListImportOperation(model);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.j2ee.internal.internal.application.operations.J2EEImportDataModel#getDefaultProperty(java.lang.String)
*/
@Override
public Object getDefaultProperty(String propertyName) {
if (CREATE_PROJECT.equals(propertyName))
return Boolean.TRUE;
else if (LINK_IMPORT.equals(propertyName))
return Boolean.FALSE;
else if (COPY.equals(propertyName))
return Boolean.FALSE;
else if (CREATE_LINKED_PROJECT.equals(propertyName))
return Boolean.FALSE;
else if (CREATE_LINKED_PATH_VARIABLE.equals(propertyName))
return Boolean.FALSE;
else if (OVERRIDE_PROJECT_ROOT.equals(propertyName))
return Boolean.FALSE;
else if (BINARY_IMPORT.equals(propertyName))
return Boolean.FALSE;
else if (PROJECT_ROOT.equals(propertyName))
return ResourcesPlugin.getWorkspace().getRoot().getRawLocation().toOSString();
else if (EAR_PROJECT_NAME.equals(propertyName))
return ""; //$NON-NLS-1$
else if (AVAILABLE_JARS_DIRECTORY.equals(propertyName))
return ""; //$NON-NLS-1$
else if (LINKED_PATH_VARIABLE.equals(propertyName))
return ""; //$NON-NLS-1$
else if (UTILITY_JAR_LIST.equals(propertyName))
return EMPTY_ARRAY;
else
return super.getDefaultProperty(propertyName);
}
@Override
public DataModelPropertyDescriptor[] getValidPropertyDescriptors(String propertyName) {
if (EAR_PROJECT_NAME.equals(propertyName)) {
return DataModelPropertyDescriptor.createDescriptors(getValidProjectNames());
} else if (LINKED_PATH_VARIABLE.equals(propertyName)) {
IPathVariableManager manager = ResourcesPlugin.getWorkspace().getPathVariableManager();
return DataModelPropertyDescriptor.createDescriptors(manager.getPathVariableNames());
} else
return super.getValidPropertyDescriptors(propertyName);
}
/**
* Populate the resource name combo with connector projects that are not encrypted.
*/
protected Object[] getValidProjectNames() {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
List projectsWithNature = new ArrayList();
IFacetedProject facetedProject = null;
for (int i = 0; i < projects.length; i++) {
if(projects[i].isAccessible()) {
try {
facetedProject = ProjectFacetsManager.create(projects[i]);
if (facetedProject!=null && facetedProject.hasProjectFacet(IJ2EEFacetConstants.ENTERPRISE_APPLICATION_FACET)) {
projectsWithNature.add(projects[i].getFullPath().toString());
}
} catch (CoreException e) {
J2EEPlugin.logError(0, e.getMessage(), e);
}
}
}
return ProjectUtilities.getProjectNamesWithoutForwardSlash((String[]) projectsWithNature.toArray(new String[projectsWithNature.size()]));
}
@Override
public IStatus validate(String propertyName) {
if (EAR_PROJECT_NAME.equals(propertyName) /* && isSet(EAR_PROJECT_NAME) */) {
String earProjectName = getStringProperty(EAR_PROJECT_NAME);
if (earProjectName != null && earProjectName.length() > 0) {
IProject earProject = ResourcesPlugin.getWorkspace().getRoot().getProject(earProjectName);
try {
if (!earProject.isAccessible())
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Specify_Valid_Project, null);
return Status.OK_STATUS;
} catch (Exception e) {
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Specify_Valid_Project, e);
}
}
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Specify_Valid_Project, null);
} else if (UTILITY_JAR_LIST.equals(propertyName) || J2EEUtilityJarListImportDataModelProvider.OVERWRITE_IF_NECESSARY.equals(propertyName)) {
Object[] list = (Object[]) getProperty(UTILITY_JAR_LIST);
if (list == null || list.length == 0)
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Select_Jar, null);
/* return validateExistingProjects(); */
return Status.OK_STATUS;
} else if (LINKED_PATH_VARIABLE.equals(propertyName)) {
if (isLinkedPathVariableInvalid())
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Specify_Linked_Path, null);
else if (linkedPathExists())
return new Status(IStatus.INFO, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_Linked_Path_Exists, null);
} else if (PROJECT_ROOT.equals(propertyName)) {
return validateProjectRoot();
}
return super.validate(propertyName);
}
private IStatus validateProjectRoot() {
if (getBooleanProperty(OVERRIDE_PROJECT_ROOT)) {
String loc = (String) getProperty(PROJECT_ROOT);
if (null != loc) {
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = new Path(loc);
return workspace.validateProjectLocation(null, path);
}
return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, EARCreationResourceHandler.J2EEUtilityJarListImportDataModel_0, null);
}
return OK_STATUS;
}
// private IStatus validateExistingProjects() {
// boolean createProject = (getBooleanProperty(J2EEUtilityJarListImportDataModel.CREATE_PROJECT)
// || getBooleanProperty(J2EEUtilityJarListImportDataModel.CREATE_LINKED_PROJECT));
// boolean overwrite =
// getBooleanProperty(J2EEUtilityJarListImportDataModel.OVERWRITE_IF_NECESSARY);
// if (createProject && !overwrite) {
// File jarFile = null;
// String nameWithoutJar = null;
// Object[] selectedJars = (Object[]) getProperty(UTILITY_JAR_LIST);
// for (int i = 0; i < selectedJars.length; i++) {
// jarFile = (File) selectedJars[i];
// int start = jarFile.getName().indexOf(".jar");
// nameWithoutJar = jarFile.getName().substring(0, start);
// if (ProjectUtilities.getProject(nameWithoutJar).exists())
// return new Status(IStatus.ERROR, J2EEPlugin.PLUGIN_ID, 0, "Existing projects with the derived
// names already exist (\"{0}\").", null); // {0}
// // nameWithoutJar
//
// }
// }
// return Status.OK_STATUS;
// }
}