package org.springframework.roo.classpath.details;
import org.apache.commons.lang3.Validate;
import org.springframework.roo.classpath.PhysicalTypeIdentifier;
import org.springframework.roo.classpath.PhysicalTypeMetadata;
import org.springframework.roo.classpath.itd.ItdMetadataProvider;
import org.springframework.roo.metadata.AbstractMetadataItem;
import org.springframework.roo.model.JavaType;
/**
* The default {@link PhysicalTypeMetadata} implementation.
*/
public class DefaultPhysicalTypeMetadata extends AbstractMetadataItem implements
PhysicalTypeMetadata {
private final ClassOrInterfaceTypeDetails cid;
private final String physicalLocationCanonicalPath;
/**
* Constructor
*
* @param metadataIdentificationString the ID to assign this
* {@link org.springframework.roo.metadata.MetadataItem} (must
* satisfy {@link PhysicalTypeIdentifier#isValid(String)})
* @param physicalLocationCanonicalPath the canonical path of the file
* containing this Java type (required)
* @param cid the details of this type (required)
*/
public DefaultPhysicalTypeMetadata(
final String metadataIdentificationString,
final String physicalLocationCanonicalPath,
final ClassOrInterfaceTypeDetails cid) {
super(metadataIdentificationString);
Validate.isTrue(
PhysicalTypeIdentifier.isValid(metadataIdentificationString),
"Metadata id '" + metadataIdentificationString
+ "' is not a valid physical type identifier");
Validate.notBlank(physicalLocationCanonicalPath,
"Physical location canonical path required");
Validate.notNull(cid, "Class or interface type details required");
this.cid = cid;
this.physicalLocationCanonicalPath = physicalLocationCanonicalPath;
}
public String getItdCanoncialPath(final ItdMetadataProvider metadataProvider) {
// Delegate to the correctly spelled method
return getItdCanonicalPath(metadataProvider);
}
public String getItdCanonicalPath(final ItdMetadataProvider metadataProvider) {
Validate.notNull(metadataProvider, "Metadata provider required");
final int dropFrom = physicalLocationCanonicalPath.lastIndexOf(".java");
Validate.isTrue(dropFrom > -1, "Unexpected governor filename format '"
+ physicalLocationCanonicalPath + "'");
return physicalLocationCanonicalPath.substring(0, dropFrom) + "_Roo_"
+ metadataProvider.getItdUniquenessFilenameSuffix() + ".aj";
}
public JavaType getItdJavaType(final ItdMetadataProvider metadataProvider) {
Validate.notNull(metadataProvider, "Metadata provider required");
return new JavaType(PhysicalTypeIdentifier.getJavaType(getId())
.getFullyQualifiedTypeName()
+ "_Roo_"
+ metadataProvider.getItdUniquenessFilenameSuffix());
}
public ClassOrInterfaceTypeDetails getMemberHoldingTypeDetails() {
return cid;
}
public String getPhysicalLocationCanonicalPath() {
return physicalLocationCanonicalPath;
}
public JavaType getType() {
return cid.getName();
}
@Override
public String toString() {
// Used for example by the "metadata for id" command
return getClass().getSimpleName() + " for " + cid.getName();
}
}