// 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.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 PackageRawData extends RawData<IFile, FileRawData> {
MetricsResults data;
private Packagename pkg;
public PackageRawData( Packagename pkg ) {
this.pkg = pkg;
data = new MetricsResults();
}
private FileRawData getOrCreateFileRawData( IFile file, ASTNodeHelper nodeHelper ) {
FileRawData rawData = getFileRawData( file );
if( rawData == null ) {
rawData = createFileRawData( file, nodeHelper );
}
return rawData;
}
private FileRawData getFileRawData( IFile file ) {
return super.getRawData( file );
}
private FileRawData createFileRawData( IFile file, ASTNodeHelper nodeHelper ) {
FileRawData rawData = new FileRawData( file, nodeHelper );
super.addRawData( file, rawData );
return rawData;
}
public void dropRawData( IFile file ) {
FileRawData fileRawData = getFileRawData( file );
if( fileRawData != null ) {
fileRawData.dropRawData();
}
remove( file ); // TODO nach oben?
}
public void dropRawData() {
for( FileRawData fileRD : getAllRawDataElements() ) {
fileRD.dropRawData();
}
removeAll();
}
public void acceptAndGuide( IMetricsResultVisitor visitor ) {
updateData();
visitor.inspectPackage( pkg, data );
JavaModelPath path = visitor.getPath();
if( path.isRestrictedToFile() ) {
this.getFileRawData( path.getFile() ).acceptAndGuide( visitor );
} else {
for( FileRawData rawData : getAllRawDataElements() ) {
rawData.acceptAndGuide( visitor );
}
}
}
private void updateData() {
data.put( MetricsResults.CLASSES, Integer.valueOf( getRawDataElementCount() ) );
}
public void putData( WrappedTypeBinding boundType, IFile file, MethodDeclaration methodDecl, ASTNodeHelper nodeHelper, String dataKey, Object value ) {
FileRawData fileRawData = getOrCreateFileRawData( file, nodeHelper );
if( fileRawData != null ) {
fileRawData.putData( boundType, methodDecl, dataKey, value );
}
}
public void putData( WrappedTypeBinding boundType, IFile file, Initializer initializer, ASTNodeHelper nodeHelper, String dataKey, Object value ) {
FileRawData fileRawData = getOrCreateFileRawData( file, nodeHelper );
if( fileRawData != null ) {
fileRawData.putData( boundType, initializer, dataKey, value );
}
}
public void putData( WrappedTypeBinding boundType, IFile file, AbstractTypeDeclaration node, ASTNodeHelper nodeHelper, String dataKey, Object value ) {
FileRawData fileRawData = getOrCreateFileRawData( file, nodeHelper );
if( fileRawData != null ) {
fileRawData.putData( boundType, node, dataKey, value );
}
}
public void removeRelationIfTargetIsGone( ClassDescriptor descriptor ) {
IFile targetFile = descriptor.getFile();
FileRawData fileRawData = getFileRawData( targetFile );
if( fileRawData == null ) {
descriptor.removeFromPool();
} else {
fileRawData.removeRelationIfTargetIsGone( descriptor );
}
}
}