All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.att.xgen.CacheGen Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
*******************************************************************************/
package com.att.xgen;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import com.att.inno.env.APIException;
import com.att.inno.env.Env;
import com.att.inno.env.Trans;
import com.att.xgen.html.State;
import com.att.xgen.html.Thematic;
public abstract class CacheGen> {
public static final int NO_FLAGS = 0x0;
public final static int PRETTY = 0x1;
public final static int XML = 0x2;
public final static int HTML4 = 0x4;
public final static int HTML5 = 0x8;
private ArrayList> sections = new ArrayList>();
private int flags;
private final Thematic thematic;
public CacheGen(int flags, Code code) throws APIException, IOException {
this.flags = flags;
final XGenBuff buff = new XGenBuff(flags,this);
// Run to gather Strings and Code Class Segments
buff.run(new Cache() {
@Override
public void dynamic(G hgen, Code code) {
sections.add(buff.newSection());
sections.add(new Dynamic(hgen.getIndent(),code));
}
},code);
sections.add(buff.newSection());
// If Code implements thematic, set for later
thematic = code instanceof Thematic?(Thematic)code:null;
}
public abstract G create(int htmlStyle, Writer w);
public void replay(State state, Trans trans, OutputStream os, String theme) throws IOException, APIException {
replay(state, trans, new OutputStreamWriter(os), theme);
}
public void replay(State state, Trans trans,Writer w, String theme) throws IOException, APIException {
if(thematic!=null) {
theme = thematic.themeResolve(theme);
}
/* Theme
trans.setTheme(theme);
int htmlStyle = state.htmlVer(theme);
*/
XGenBuff buff = new XGenBuff(flags,this);
// forward
int indent = 0;
Section s;
int i=0;
@SuppressWarnings("unchecked")
Section[] reverse = new Section[sections.size()];
for(Section section : sections) {
s = section.use(state, trans, buff); // note, doesn't change cached, only dynamic, which is created for thread
int tempIndent = s.getIndent();
s.setIndent(indent);
s.forward(w);
s.setIndent(tempIndent);
indent = tempIndent;
reverse[i++]=s;
}
for(--i;i>=0;--i) {
reverse[i].back(w);
}
w.flush();
}
private class Dynamic extends Section {
private Code code;
public Dynamic(int indent, Code code) {
this.code = code;
this.indent = indent;
}
@SuppressWarnings("unchecked")
public Section use(State state, Trans trans, XGenBuff buff) throws APIException, IOException {
// Clone Dynamic to make Thread Safe
Dynamic d = new Dynamic(indent,code);
buff.setIndent(indent);
if(code instanceof DynamicCode) {
buff.run(state,trans,Cache.Null.singleton(), (DynamicCode)code);
} else {
buff.run((Cache)Cache.Null.singleton(), code);
}
Section s = buff.newSection();
d.indent = s.indent;
d.forward = s.forward;
d.backward = s.backward;
return d;
}
}
}