blob: d143f7b8c0f8d361bf0b329a48d01bb3b75833ee [file] [log] [blame]
/***************************************************************************************************
* Copyright (c) 2003, 2004 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
**************************************************************************************************/
/*
* Created on Mar 24, 2004
*
* To change the template for this generated file go to Window - Preferences - Java - Code
* Generation - Code and Comments
*/
package org.eclipse.jst.j2ee.internal.reference;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.applicationclient.internal.creation.ApplicationClientNatureRuntime;
import org.eclipse.jst.j2ee.client.ApplicationClient;
import org.eclipse.jst.j2ee.common.MessageDestination;
import org.eclipse.jst.j2ee.ejb.AssemblyDescriptor;
import org.eclipse.jst.j2ee.ejb.EJBJar;
import org.eclipse.jst.j2ee.ejb.EnterpriseBean;
import org.eclipse.jst.j2ee.ejb.MessageDriven;
import org.eclipse.jst.j2ee.internal.common.XMLResource;
import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
import org.eclipse.jst.j2ee.internal.moduleextension.EarModuleManager;
import org.eclipse.jst.j2ee.internal.project.IEJBNatureConstants;
import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants;
import org.eclipse.jst.j2ee.internal.project.J2EECreationResourceHandler;
import org.eclipse.jst.j2ee.internal.project.J2EENature;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.webapplication.WebApp;
import org.eclipse.wst.common.frameworks.internal.operations.WTPOperation;
import org.eclipse.wst.common.frameworks.internal.plugin.WTPCommonPlugin;
public class MessageDestReferenceDataModel extends ReferenceDataModel {
/**
* Required, type String
*/
public static final String TARGET = "MessageDestReferenceDataModel.TARGET"; //$NON-NLS-1$
/**
* Required, type String
*/
public static final String TYPE = "MessageDestReferenceDataModel.TYPE"; //$NON-NLS-1$
/**
* Required, type String
*/
public static final String LINK = "MessageDestReferenceDataModel.LINK"; //$NON-NLS-1$
/**
* Required, type String
*/
public static final String USAGE = "MessageDestReferenceDataModel.USAGE"; //$NON-NLS-1$
/**
* Required, type String
*/
public static final String HAS_LINK = "MessageDestReferenceDataModel.HAS_LINK"; //$NON-NLS-1$
/**
* Required, type String
*/
public static final String TARGET_IN_DIFFERENT_EAR = "MessageDestReferenceDataModel.TARGET_IN_DIFFERENT_EAR"; //$NON-NLS-1$
private List messageDestinationNames;
protected void init() {
super.init();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.internal.emfworkbench.operation.EditModelOperationDataModel#initValidBaseProperties()
*/
protected void initValidBaseProperties() {
addValidBaseProperty(TARGET);
addValidBaseProperty(TYPE);
addValidBaseProperty(LINK);
addValidBaseProperty(USAGE);
addValidBaseProperty(HAS_LINK);
addValidBaseProperty(TARGET_IN_DIFFERENT_EAR);
super.initValidBaseProperties();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModel#getDefaultProperty(java.lang.String)
*/
protected Object getDefaultProperty(String propertyName) {
return super.getDefaultProperty(propertyName);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.j2ee.internal.internal.reference.ReferenceDataModel#doValidateProperty(java.lang.String)
*/
protected IStatus doValidateProperty(String propertyName) {
IStatus status = super.doValidateProperty(propertyName);
if (TYPE.equals(propertyName) || USAGE.equals(propertyName)) {
String temp = getStringProperty(propertyName);
if (temp == null || temp.trim().equals("")) { //$NON-NLS-1$
if (TYPE.equals(propertyName)) {
return WTPCommonPlugin.createErrorStatus(J2EECreationResourceHandler.getString("MessageDestReferenceDataModel.7")); //$NON-NLS-1$
} else if (USAGE.equals(propertyName)) {
return WTPCommonPlugin.createErrorStatus(J2EECreationResourceHandler.getString("MessageDestReferenceDataModel.8")); //$NON-NLS-1$
}
}
} else if (LINK.equals(propertyName) && !getBooleanProperty(HAS_LINK)) {
if (!verifyLinkUnique(getStringProperty(LINK)))
return WTPCommonPlugin.createErrorStatus(J2EECreationResourceHandler.getString("MessageDestReferenceDataModel.9")); //$NON-NLS-1$
} else if (propertyName.equals(TARGET)) {
Object target = getProperty(TARGET);
if (target == null || !(target instanceof EnterpriseBean))
return WTPCommonPlugin.createErrorStatus(J2EECreationResourceHandler.getString("EJBReferenceDataModel_UI_12")); //$NON-NLS-1$
}
return status;
}
/**
* @param string
*/
private boolean verifyLinkUnique(String link) {
if (messageDestinationNames == null) {
EObject owner = (EObject) getProperty(OWNER);
IProject containingProject = J2EEProjectUtilities.getProject(owner);
EARNatureRuntime[] ears = J2EEProjectUtilities.getReferencingEARProjects(containingProject);
if (ears == null) {
messageDestinationNames = getModuleMessageDestinationNames(owner);
} else {
messageDestinationNames = new ArrayList();
for (int j = 0; j < ears.length; j++) {
try {
IProject[] refProj = ears[j].getProject().getReferencedProjects();
if (refProj != null) {
for (int k = 0; k < refProj.length; k++) {
messageDestinationNames.addAll(getModuleMessageDestinationNames(refProj[k]));
}
}
} catch (CoreException e) {
Logger.getLogger().log(e.getMessage());
}
}
}
}
if (messageDestinationNames == null || messageDestinationNames.isEmpty())
return true;
String name;
for (int i = 0; i < messageDestinationNames.size(); i++) {
name = ((MessageDestination) messageDestinationNames.get(i)).getName();
if (name != null && name.equals(link))
return false;
}
return true;
}
/**
* @param project
* @return
*/
private List getModuleMessageDestinationNames(IProject project) throws CoreException {
if (project.hasNature(ApplicationClientNatureRuntime.NATURE_ID)) {
J2EENature runtime = (J2EENature) project.getNature(ApplicationClientNatureRuntime.NATURE_ID);
ApplicationClient appClient = (ApplicationClient) runtime.getDeploymentDescriptorRoot();
if (appClient != null)
return appClient.getMessageDestinations();
} else if (project.hasNature(IWebNatureConstants.J2EE_NATURE_ID)) {
J2EENature runtime = (J2EENature) project.getNature(IWebNatureConstants.J2EE_NATURE_ID);
WebApp webApp = (WebApp) runtime.getDeploymentDescriptorRoot();
if (webApp != null)
return webApp.getMessageDestinations();
return (List) (runtime.getDeploymentDescriptorRoot());
} else if (project.hasNature(IEJBNatureConstants.NATURE_ID)) {
EJBJar ejbJar = EarModuleManager.getEJBModuleExtension().getEJBJar(project);
AssemblyDescriptor assDesc = ejbJar.getAssemblyDescriptor();
if (assDesc != null)
return assDesc.getMessageDestinations();
}
return new ArrayList();
}
/**
* @return
*/
private List getModuleMessageDestinationNames(EObject owner) {
List temp = new ArrayList();
if (owner == null)
return temp;
switch (getDeploymentDescriptorType()) {
case XMLResource.APP_CLIENT_TYPE :
ApplicationClient client = (ApplicationClient) owner;
temp = client.getMessageDestinations();
break;
case XMLResource.EJB_TYPE :
EnterpriseBean ejb = (EnterpriseBean) owner;
AssemblyDescriptor assDesc = ejb.getEjbJar().getAssemblyDescriptor();
if (assDesc != null)
temp = assDesc.getMessageDestinations();
break;
case XMLResource.WEB_APP_TYPE :
WebApp app = (WebApp) owner;
temp = app.getMessageDestinations();
break;
}
return temp;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jst.j2ee.internal.internal.reference.ReferenceDataModel#doSetProperty(java.lang.String,
* java.lang.Object)
*/
protected boolean doSetProperty(String propertyName, Object propertyValue) {
if (TARGET.equals(propertyName)) {
MessageDriven target = (MessageDriven) propertyValue;
//setup Link
if (target == null)
return super.doSetProperty(propertyName, propertyValue);
if (target.getLink() != null) {
setProperty(HAS_LINK, Boolean.TRUE);
setProperty(LINK, target.getLink());
} else {
setProperty(HAS_LINK, Boolean.FALSE);
setProperty(LINK, target.getName());
}
//setup type
//setProperty(TYPE, target.getMess);
//setup name
setProperty(REF_NAME, target.getName());
notifyEnablementChange(LINK);
}
return super.doSetProperty(propertyName, propertyValue);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModel#basicIsEnabled(java.lang.String)
*/
protected Boolean basicIsEnabled(String propertyName) {
if (propertyName.equals(LINK)) {
if (getBooleanProperty(HAS_LINK))
return Boolean.FALSE;
return Boolean.TRUE;
}
return super.basicIsEnabled(propertyName);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperationDataModel#getDefaultOperation()
*/
public WTPOperation getDefaultOperation() {
return new MessageDestReferenceCreationOperation(this);
}
}