Package org.springframework.ide.eclipse.aop.core.internal.model

Source Code of org.springframework.ide.eclipse.aop.core.internal.model.AopReferenceElementFactory

/*******************************************************************************
* Copyright (c) 2007, 2009 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.IFile;
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.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.JavaCore;
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.ADVICE_TYPE;
import org.springframework.ide.eclipse.core.java.JdtUtils;

/**
* @author Christian Dupuis
* @since 2.0
*/
public class AopReferenceElementFactory implements IElementFactory {

  protected static final String BEAN_ATTRIBUTE = "bean";

  protected static final String BEAN_FILE_ATTRIBUTE = "bean-file";

  protected static final String BEAN_START_LINE_ATTRIBUTE = "bean-start-line";

  protected static final String FILE_ATTRIBUTE = "file";

  protected static final String TARGET_ATTRIBUTE = "target";

  protected static final String SOURCE_ATTRIBUTE = "source";

  protected static final String ADVICE_TYPE_ATTRIBUTE = "advice-type";

  public static final String SOURCE_START_LINE_ATTRIBUTE = "source-start-line";

  public static final String TARGET_START_LINE_ATTRIBUTE = "target-start-line";

  public static String FACTORY_ID = Activator.PLUGIN_ID + ".aopReferenceElementFactory";

  public final IAdaptable createElement(IMemento memento) {
    ADVICE_TYPE type = ADVICE_TYPE.valueOf(memento.getString(ADVICE_TYPE_ATTRIBUTE));
   
    String sourceHandle = memento.getString(SOURCE_ATTRIBUTE);
    Integer sourceStartLine = Integer.valueOf(-1);
    IJavaElement source = null;
    if (sourceHandle != null) {
      source = JavaCore.create(sourceHandle);
      sourceStartLine = memento.getInteger(SOURCE_START_LINE_ATTRIBUTE);
      if (sourceStartLine == null) {
        sourceStartLine = JdtUtils.getLineNumber(source);
      }
    }

    String targetHandle = memento.getString(TARGET_ATTRIBUTE);
    Integer targetStartLine = Integer.valueOf(-1);
    IJavaElement target = null;
    if (targetHandle != null) {
      target = JavaCore.create(targetHandle);
      targetStartLine = memento.getInteger(TARGET_START_LINE_ATTRIBUTE);
      if (targetStartLine == null) {
        targetStartLine = JdtUtils.getLineNumber(target);
      }
    }

    String fileName = memento.getString(FILE_ATTRIBUTE);
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    IResource member = root.findMember(fileName);

    String beanId = memento.getString(BEAN_ATTRIBUTE);
    Integer beanStartline = memento.getInteger(BEAN_START_LINE_ATTRIBUTE);
    if (beanStartline == null) {
      beanStartline = 0;
    }

    String beanFileName = memento.getString(BEAN_FILE_ATTRIBUTE);
    IResource beanResource = null;
    // Pre 2.3.0 version weren't persisting the file attribute; so be careful
    if (beanFileName != null) {
      beanResource = root.findMember(beanFileName);
    }

    if (member != null && member instanceof IFile && source != null && target != null && source instanceof IMember
        && target instanceof IMember && beanResource != null && beanResource instanceof IFile) {
      return new AopReference(type, (IMember) source, sourceStartLine, (IMember) target, targetStartLine, member,
          beanId, beanResource, beanStartline);
    }
    return null;
  }
}
TOP

Related Classes of org.springframework.ide.eclipse.aop.core.internal.model.AopReferenceElementFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.