blob: a462294529f4c11b5340f98c39f664ff2e43960b [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
*******************************************************************************/
package org.eclipse.jst.j2ee.internal;
import org.eclipse.jst.common.jdt.internal.integration.WorkingCopyManager;
import org.eclipse.jst.common.jdt.internal.integration.WorkingCopyManagerFactory;
import org.eclipse.jst.j2ee.internal.common.XMLResource;
import org.eclipse.jst.j2ee.internal.project.J2EENature;
import org.eclipse.jst.j2ee.webservice.wsclient.WebServicesResource;
import org.eclipse.wst.common.frameworks.internal.activities.WTPActivityBridge;
import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelEvent;
import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
/**
* This class is used by clients (mainly editors) when there is an intent to modify a resource
* within the Workbench. All clients with a specific key (this specifies a grouping of common
* resources), will get the same instance of the J2EEEditModel. Clients will obtain resources
* through this edit model. A client can add themselves as a listener (@see J2EEEditModelListener).
* This will allow clients to fire property change notifications when a J2EEEditModelEvent is
* detected. This helps to synchronize editors within the Workbench. There is no need for editors to
* add themselves as CommandStack listeners because this edit model will catch CommandStack changes
* and forward them to all listeners as J2EEEditModelEvents.
*
* A J2EEEditModel is obtained from the J2EENature (@see getEditModel(Object)).
*
* TIPS ON USING THIS EDIT MODEL:
*
* To determine if a client needs to save (e.g., <code>isSaveNeeded()</code>), one should call
* <code>isDirty()</code>.
*
* To determine if a client needs to save when closing (e.g., <code>isSaveOnCloseNeeded()</code>),
* one should call <code>needsToSave()</code>.
*
* When the main client (editor) performs a save (e.g., <code>doSave()</code>), they should call
* <code>save()</code>.
*
* If a wizard or another client needs to save the resources but they are not the primary editor,
* <code>saveIfNecessary()</code> should be called. This will save the resources only if there are
* no other references to this edit model.
*
* When disposing the client, <code>releaseAccess</code> should be called.
*
* @deprecated
* Use
* <p>
* ArtifactEdit
* </p>
*/
public class J2EEEditModel extends EditModel {
private WorkingCopyManager workingCopyManager = null;
/**
* This activity no longer exists use ENTERPRISE_JAVA instead
*
* @deprecated
*/
public static final String APP_CLIENT_DEV_ACTIVITY_ID = "org.eclipse.jst.j2ee.application.client.development"; //$NON-NLS-1$
/**
* This activity no longer exists use ENTERPRISE_JAVA instead
*
* @deprecated
*/
public static final String EJB_DEV_ACTIVITY_ID = "com.ibm.wtp.ejb.development"; //$NON-NLS-1$
/**
* This activity no longer exists use ENTERPRISE_JAVA instead
*
* @deprecated
*/
public static final String JCA_DEV_ACTIVITY_ID = "com.ibm.wtp.jca.development"; //$NON-NLS-1$
public static final String WEB_DEV_ACTIVITY_ID = "com.ibm.wtp.web.development"; //$NON-NLS-1$
public static final String ENTERPRISE_JAVA = "com.ibm.wtp.ejb.development"; //$NON-NLS-1$
/**
* J2EEEditModel constructor comment.
*/
public J2EEEditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly) {
super(editModelID, context, readOnly);
}
/**
* J2EEEditModel constructor comment.
*/
public J2EEEditModel(String editModelID, EMFWorkbenchContext context, boolean readOnly, boolean accessUnkownResourcesAsReadOnly) {
super(editModelID, context, readOnly);
}
/**
* This will be the type of the deployment descriptor docuemnt. Subclasses should override if
* they have a deployment descriptor.
*
* @see XMLResource#APP_CLIENT_TYPE
* @see XMLResource#APPLICATION_TYPE
* @see XMLResource#EJB_TYPE
* @see XMLResource#WEB_APP_TYPE
* @see XMLResource#RAR_TYPE
*/
public int getDeploymentDescriptorType() {
if (getJ2EENature() != null)
return getJ2EENature().getDeploymentDescriptorType();
return -1;
}
/**
* Subclasses should override to return the proper deployment descriptor resource.
*/
public XMLResource getDeploymentDescriptorResource() {
return null;
}
public J2EENature getJ2EENature() {
return J2EENature.getRegisteredRuntime(getProject());
}
public WebServicesResource get13WebServicesClientResource() {
return null;
}
private ActivityEditModelListener activityEditModelListener = null;
private class ActivityEditModelListener implements EditModelListener {
public void editModelChanged(EditModelEvent anEvent) {
if (anEvent.getEventCode() == EditModelEvent.DIRTY) {
try {
WTPActivityBridge.getInstance().enableActivity(getDevelopmentAcivityID(), true);
} finally {
removeListener(this);
activityEditModelListener = null;
}
}
}
}
public void notifyActivityChanges(boolean b) {
if (null != activityEditModelListener || null == getDevelopmentAcivityID()) {
return;
}
activityEditModelListener = new ActivityEditModelListener();
getListeners().add(activityEditModelListener);
}
public String getDevelopmentAcivityID() {
return null;
}
/**
* Returns the working copy remembered for the compilation unit.
*
* @param input
* ICompilationUnit
* @return the working copy of the compilation unit, or <code>null</code> if there is no
* remembered working copy for this compilation unit
*/
public org.eclipse.jdt.core.ICompilationUnit getWorkingCopy(org.eclipse.jdt.core.ICompilationUnit cu, boolean forNewCU) throws org.eclipse.core.runtime.CoreException {
if (isReadOnly())
return null;
return getWorkingCopyManager().getWorkingCopy(cu, forNewCU);
}
public WorkingCopyManager getWorkingCopyManager() {
if (workingCopyManager == null)
workingCopyManager = WorkingCopyManagerFactory.newRegisteredInstance();
return workingCopyManager;
}
/**
* Reset the working copy manager because the ejb-jar.xml was removed without disposing.
*/
protected void resetWorkingCopyManager() {
if (workingCopyManager != null) {
workingCopyManager.dispose();
workingCopyManager = null;
}
}
}