// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.core.internal.proportions.rawdata; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; import org.eclipse.jdt.core.dom.Initializer; import org.eclipse.jdt.core.dom.MethodDeclaration; import org.projectusus.core.IMetricsResultVisitor; import org.projectusus.core.basis.JavaModelPath; import org.projectusus.core.filerelations.model.ASTNodeHelper; import org.projectusus.core.filerelations.model.BoundTypeConverter; import org.projectusus.core.filerelations.model.ClassDescriptor; import org.projectusus.core.filerelations.model.WrappedTypeBinding; class WorkspaceRawData extends RawData<IProject, ProjectRawData> { private BoundTypeConverter converter; private ASTNodeHelper nodeHelper; public WorkspaceRawData( ASTNodeHelper nodeHelper ) { super(); this.nodeHelper = nodeHelper; this.converter = new BoundTypeConverter( nodeHelper ); } private ProjectRawData getOrCreateProjectRawData( IProject project ) { ProjectRawData rawData = getProjectRawData( project ); if( rawData == null ) { rawData = new ProjectRawData( project ); super.addRawData( project, rawData ); } return rawData; } private ProjectRawData getProjectRawData( IProject project ) { return super.getRawData( project ); } public void dropRawData( IProject project ) { ProjectRawData projectRawData = getProjectRawData( project ); if( projectRawData != null ) { projectRawData.dropRawData(); remove( project ); } } public void dropRawData( IFile file ) { ProjectRawData projectRawData = getProjectRawData( file.getProject() ); if( projectRawData != null ) { projectRawData.dropRawData( file ); } } public void acceptAndGuide( IMetricsResultVisitor visitor ) { JavaModelPath path = visitor.getPath(); if( path.isRestrictedToProject() ) { ProjectRawData projectRawData = this.getProjectRawData( path.getProject() ); if( projectRawData != null ) { projectRawData.acceptAndGuide( visitor ); } } else { for( ProjectRawData projectRD : getAllRawDataElements() ) { projectRD.acceptAndGuide( visitor ); } } } public void putData( IFile file, MethodDeclaration methodDecl, String dataKey, Object value ) { WrappedTypeBinding boundType = converter.wrap( nodeHelper.findEnclosingClassOf( methodDecl ) ); if( boundType == null ) { return; } ProjectRawData projectRawData = getOrCreateProjectRawData( file.getProject() ); if( projectRawData != null ) { projectRawData.putData( boundType, file, methodDecl, nodeHelper, dataKey, value ); } } public void putData( IFile file, Initializer initializer, String dataKey, Object value ) { WrappedTypeBinding boundType = converter.wrap( nodeHelper.findEnclosingClassOf( initializer ) ); if( boundType == null ) { return; } ProjectRawData projectRawData = getOrCreateProjectRawData( file.getProject() ); if( projectRawData != null ) { projectRawData.putData( boundType, file, initializer, nodeHelper, dataKey, value ); } } public void putData( IFile file, AbstractTypeDeclaration node, String dataKey, Object value ) { WrappedTypeBinding boundType = converter.wrap( node ); if( boundType == null ) { return; } ProjectRawData projectRawData = getOrCreateProjectRawData( file.getProject() ); if( projectRawData != null ) { projectRawData.putData( boundType, file, node, nodeHelper, dataKey, value ); } } public void removeRelationIfTargetIsGone( ClassDescriptor descriptor ) { ProjectRawData projectRawData = getProjectRawData( descriptor.getFile().getProject() ); if( projectRawData != null ) { projectRawData.removeRelationIfTargetIsGone( descriptor ); } else { // project dropped descriptor.removeFromPool(); } } }