// 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.basis.MetricsResults; import org.projectusus.core.filerelations.model.ASTNodeHelper; import org.projectusus.core.filerelations.model.ClassDescriptor; import org.projectusus.core.filerelations.model.Packagename; import org.projectusus.core.filerelations.model.WrappedTypeBinding; class ProjectRawData extends RawData<Packagename, PackageRawData> { MetricsResults data; private IProject project; public ProjectRawData( IProject project ) { this.project = project; data = new MetricsResults(); } private PackageRawData getOrCreatePackageRawData( Packagename pkg ) { PackageRawData rawData = getPackageRawData( pkg ); if( rawData == null ) { rawData = createPackageRawData( pkg ); } return rawData; } private PackageRawData getPackageRawData( Packagename pkg ) { return super.getRawData( pkg ); } private PackageRawData getPackageRawData( IFile file ) { for( PackageRawData pkg : getAllRawDataElements() ) { FileRawData fileRawData = pkg.getRawData( file ); if( fileRawData != null ) { return pkg; } } return null; } private PackageRawData createPackageRawData( Packagename pkg ) { PackageRawData rawData = new PackageRawData( pkg ); super.addRawData( pkg, rawData ); return rawData; } public void dropRawData( IFile file ) { for( PackageRawData rawData : getAllRawDataElements() ) { rawData.dropRawData( file ); } } public void dropRawData() { for( PackageRawData rawData : getAllRawDataElements() ) { rawData.dropRawData(); } removeAll(); } public void acceptAndGuide( IMetricsResultVisitor visitor ) { visitor.inspectProject( project, data ); JavaModelPath path = visitor.getPath(); if( path.isRestrictedToFile() ) { this.getPackageRawData( path.getFile() ).acceptAndGuide( visitor ); } else { for( PackageRawData rawData : getAllRawDataElements() ) { rawData.acceptAndGuide( visitor ); } } } public void putData( WrappedTypeBinding boundType, IFile file, MethodDeclaration methodDecl, ASTNodeHelper nodeHelper, String dataKey, Object value ) { PackageRawData rawData = getOrCreatePackageRawData( boundType.getPackagename() ); if( rawData != null ) { rawData.putData( boundType, file, methodDecl, nodeHelper, dataKey, value ); } } public void putData( WrappedTypeBinding boundType, IFile file, Initializer initializer, ASTNodeHelper nodeHelper, String dataKey, Object value ) { PackageRawData rawData = getOrCreatePackageRawData( boundType.getPackagename() ); if( rawData != null ) { rawData.putData( boundType, file, initializer, nodeHelper, dataKey, value ); } } public void putData( WrappedTypeBinding boundType, IFile file, AbstractTypeDeclaration node, ASTNodeHelper nodeHelper, String dataKey, Object value ) { PackageRawData rawData = getOrCreatePackageRawData( boundType.getPackagename() ); if( rawData != null ) { rawData.putData( boundType, file, node, nodeHelper, dataKey, value ); } } public void removeRelationIfTargetIsGone( ClassDescriptor descriptor ) { IFile targetFile = descriptor.getFile(); PackageRawData rawData = getPackageRawData( targetFile ); if( rawData == null ) { descriptor.removeFromPool(); } else { rawData.removeRelationIfTargetIsGone( descriptor ); } } }