package com.softwarementors.extjs.djn.api;
import org.apache.log4j.Logger;
import com.softwarementors.extjs.djn.StringUtils;
import com.softwarementors.extjs.djn.jscodegen.Minifier;
import edu.umd.cs.findbugs.annotations.CheckForNull;
import edu.umd.cs.findbugs.annotations.NonNull;
public class RegisteredCode {
public @NonNull static final Logger logger = Logger.getLogger( RegisteredCode.class );
private boolean minify;
private boolean debug;
private boolean minificationFailed;
private @NonNull String name;
private @NonNull String fullApiFileName;
private @NonNull StringBuilder debugCodeBuilder = new StringBuilder();
private @NonNull StringBuilder nonCommentsCodeBuilder = new StringBuilder();
private String minifiedCode;
private String debugCode;
private String nonCommentsCode;
public boolean hasDebugCode() {
return this.debug;
}
public boolean hasMinifiedCode() {
return this.minify;
}
public RegisteredCode( String name, String fullApiFileName, boolean minify, boolean debug ) {
assert !StringUtils.isEmpty(name);
assert !StringUtils.isEmpty(fullApiFileName);
this.name = name;
this.fullApiFileName = fullApiFileName;
this.minify = minify;
this.debug = debug;
}
@NonNull
public String getName() {
return this.name;
}
@NonNull
public String getFullApiFileName() {
return this.fullApiFileName;
}
@NonNull
public StringBuilder getDebugCodeBuilder() {
assert hasDebugCode();
return this.debugCodeBuilder;
}
@NonNull
public String getDebugCode() {
if( this.debugCode == null ) {
this.debugCode = this.debugCodeBuilder.toString();
}
return this.debugCode;
}
@NonNull
public StringBuilder getNonCommentsCodeBuilder() {
return this.nonCommentsCodeBuilder;
}
@NonNull
public String getNonCommentsCode() {
if( this.nonCommentsCode == null ) {
this.nonCommentsCode = this.nonCommentsCodeBuilder.toString();
}
return this.nonCommentsCode;
}
@CheckForNull
public String getMinifiedCode() {
assert hasMinifiedCode();
if( this.minifiedCode == null && !this.minificationFailed ) {
this.minifiedCode = Minifier.minify(getNonCommentsCode(), getName(), getDebugCode().length());
this.minificationFailed = this.minifiedCode == null;
if( this.minificationFailed ) {
logger.warn( "Unable to minify code for '" + getName() + "'.");
}
}
return this.minifiedCode;
}
@NonNull
public String getCode() {
String code = null;
if( hasDebugCode() ) {
if( logger.isDebugEnabled()) {
logger.debug( "Production mode: using debug code for '" + getName() + "'");
}
code = getDebugCode();
}
else if( hasMinifiedCode() ) {
if( logger.isDebugEnabled()) {
logger.debug( "Production mode: using minified code for '" + getName() + "'");
}
code = getMinifiedCode();
}
if( code == null )
code = getNonCommentsCode();
return code;
}
}