/*******************************************************************************
* Copyright (c) 2007, 2008 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.aop.core.internal.model;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ui.IElementFactory;
import org.eclipse.ui.IMemento;
import org.springframework.ide.eclipse.aop.core.Activator;
import org.springframework.ide.eclipse.aop.core.model.IAopReference;
import org.springframework.ide.eclipse.aop.core.model.IAopReference.ADVICE_TYPE;
import org.springframework.util.StringUtils;
/**
* @author Christian Dupuis
* @since 2.0
*/
public class BeanAspectDefinitionElementFactory implements IElementFactory {
protected static final String ADVICE_TYPE_ATTRIBUTE = "advice-type";
protected static final String PROXY_TARGET_CLASS_ATTRIBUTE = "proxy-target-class";
protected static final String FILE_ATTRIBUTE = "file";
protected static final String ASPECT_START_LINE_NUMBER_ATTRIBUTE = "aspect-start-line-number";
protected static final String ASPECT_END_LINE_NUMBER_ATTRIBUTE = "aspect-end-line-number";
protected static final String ARG_NAMES_ATTRIBUTE = "arg-names";
protected static final String THROWING_ATTRIBUTE = "throwing";
protected static final String RETURNING_ATTRIBUTE = "returning";
protected static final String POINTCUT_EXPRESSION_ATTRIBUTE = "pointcut-expression";
protected static final String ASPECT_NAME_ATTRIBUTE = "aspect-name";
protected static final String ADVICE_METHOD_PARAMETER_TYPES_ATTRIBUTE = "advice-method-parameter-types";
protected static final String ADVICE_CLASS_NAME_ATTRIBUTE = "advice-class-name";
protected static final String ADVICE_METHOD_NAME_ATTRIBUTE = "advice-method-name";
public static String FACTORY_ID = Activator.PLUGIN_ID
+ ".beanAspectDefinitionElementFactory";
protected BeanAspectDefinition createAspectDefinition() {
return new BeanAspectDefinition();
}
public final IAdaptable createElement(IMemento memento) {
BeanAspectDefinition definition = createAspectDefinition();
populateAspectDefinition(definition, memento);
return definition;
}
protected final void populateAspectDefinition(
BeanAspectDefinition definition, IMemento memento) {
String adviceMethodName = memento
.getString(ADVICE_METHOD_NAME_ATTRIBUTE);
String aspectClassName = memento.getString(ADVICE_CLASS_NAME_ATTRIBUTE);
String adviceMethodParameterTypesString = memento
.getString(ADVICE_METHOD_PARAMETER_TYPES_ATTRIBUTE);
String[] adviceMethodParameterTypes = null;
if (adviceMethodParameterTypesString != null) {
adviceMethodParameterTypes = StringUtils
.delimitedListToStringArray(
adviceMethodParameterTypesString, ",");
}
String aspectName = memento.getString(ASPECT_NAME_ATTRIBUTE);
String pointcutExpressionString = memento
.getString(POINTCUT_EXPRESSION_ATTRIBUTE);
String returning = memento.getString(RETURNING_ATTRIBUTE);
String throwing = memento.getString(THROWING_ATTRIBUTE);
String argNamesString = memento.getString(ARG_NAMES_ATTRIBUTE);
String[] argNames = null;
if (argNamesString != null) {
argNames = StringUtils.delimitedListToStringArray(argNamesString,
",");
}
int aspectStartLineNumber = memento.getInteger(ASPECT_START_LINE_NUMBER_ATTRIBUTE);
int aspectEndLineNumber = memento.getInteger(ASPECT_END_LINE_NUMBER_ATTRIBUTE);
String fileName = memento.getString(FILE_ATTRIBUTE);
boolean proxyTargetClass = Boolean.valueOf(memento
.getString(PROXY_TARGET_CLASS_ATTRIBUTE));
IAopReference.ADVICE_TYPE type = ADVICE_TYPE.valueOf(memento
.getString(ADVICE_TYPE_ATTRIBUTE));
definition.setAdviceMethodName(adviceMethodName);
definition.setAspectClassName(aspectClassName);
definition.setAdviceMethodParameterTypes(adviceMethodParameterTypes);
definition.setAspectName(aspectName);
definition.setPointcutExpression(pointcutExpressionString);
definition.setReturning(returning);
definition.setThrowing(throwing);
definition.setArgNames(argNames);
definition.setAspectStartLineNumber(aspectStartLineNumber);
definition.setAspectEndLineNumber(aspectEndLineNumber);
definition.setProxyTargetClass(proxyTargetClass);
definition.setType(type);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IResource member = root.findMember(fileName);
if (member != null) {
definition.setResource(member);
}
postPopulateAspectDefinition(definition, memento);
}
protected void postPopulateAspectDefinition(
BeanAspectDefinition definition, IMemento memento) {
}
}