/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.util.database;
import java.util.logging.Logger;
import net.sourceforge.pmd.cpd.SourceCode;
import net.sourceforge.pmd.lang.Language;
/**
* Instantiate the fields required to retrieve {@link SourceCode}.
*
* @author sturton
*/
public class SourceObject {
private static final String CLASS_NAME = SourceObject.class.getName();
private static final Logger LOG = Logger.getLogger(CLASS_NAME);
/**
* Database Schema/Owner - SYS,SYSTEM,SCOTT
*
*/
String schema;
/**
* Source Code Name - DBMS_METADATA
*
*/
String name;
/**
* Source Code Type -
* FUNCTION,PROCEDURE,TRIGGER,PACKAGE,PACKAGE_BODY,TYPE,TYPE_BODY,JAVA_SOURCE.
*
*/
String type;
/**
* Source Code Revision - Optional revision/version
*
*/
String revision;
SourceObject(String schema, String type, String name, String revision) {
this.schema = schema;
this.type = type;
this.name = name;
this.revision = revision;
}
@Override
public String toString() {
return String.format("schema=\"%s\",type=\"%s\",name=\"%s\",revision=\"%s\"", this.getSchema(), this.getType(),
this.getName(), this.getRevision());
}
/**
* @return the schema
*/
public String getSchema() {
return schema;
}
/**
* @param schema
* the schema to set
*/
public void setSchema(String schema) {
this.schema = schema;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the type
*/
public String getType() {
return type;
}
/**
* @param type
* the type to set
*/
public void setType(String type) {
this.type = type;
}
/**
* @return the revision
*/
public String getRevision() {
return revision;
}
/**
* @param revision
* the revision to set
*/
public void setRevision(String revision) {
this.revision = revision;
}
/**
* Map the type to a file suffix associated with a {@link Language}
*
* @return inferred suffix
*/
public String getSuffixFromType() {
LOG.entering(CLASS_NAME, "getSuffixFromType", this);
if (null == type || type.isEmpty()) {
return "";
} else if (type.toUpperCase().indexOf("JAVA") >= 0) {
return ".java";
} else if (type.toUpperCase().indexOf("TRIGGER") >= 0) {
return ".trg";
} else if (type.toUpperCase().indexOf("FUNCTION") >= 0) {
return ".fnc";
} else if (type.toUpperCase().indexOf("PROCEDURE") >= 0) {
return ".prc";
} else if (type.toUpperCase().indexOf("PACKAGE_BODY") >= 0) {
return ".pkb";
} else if (type.toUpperCase().indexOf("PACKAGE") >= 0) {
return ".pks";
} else if (type.toUpperCase().indexOf("TYPE_BODY") >= 0) {
return ".tpb";
} else if (type.toUpperCase().indexOf("TYPE") >= 0) {
return ".tps";
} else {
return "";
}
}
/**
* Gets the data source as a pseudo file name (faux-file). Adding a suffix
* matching the source object type ensures that the appropriate language
* parser is used.
*/
public String getPseudoFileName() {
String falseFilePath = String.format("/Database/%s/%s/%s%s", getSchema(), getType(), getName(),
getSuffixFromType());
return falseFilePath;
}
}