您的位置:首页 > 其它

dolite模板引擎开发

2017-12-15 14:56 330 查看
DateTimeContext:

package com.pingan;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public class DateTimeContext {

private String DEFAULT_FORMATTER = "yyyyMMdd";

public String plusDays(String curr, int days)
{
return plusDays(curr, days, this.DEFAULT_FORMATTER);
}

public String plusDays(String curr, int days, String formatter)
{
DateTime dt = parseDate(curr);
return plusDays(dt, days, formatter);
}

private String plusDays(DateTime dt, int days, String formatter)
{
return dt.plusDays(days).toString(formatter);
}

public String minusDays(String curr, int days)
{
return minusDays(curr, days, this.DEFAULT_FORMATTER);
}

public String minusDays(String curr, int days, String formatter)
{
DateTime dt = parseDate(curr);
return minusDays(dt, days, formatter);
}

private String minusDays(DateTime dt, int days, String formatter)
{
return dt.minusDays(days).toString(formatter);
}

public String plusMonths(String curr, int months)
{
return plusMonths(curr, months, this.DEFAULT_FORMATTER);
}

public String plusMonths(String curr, int months, String formatter)
{
DateTime dt = parseDate(curr);
return plusMonths(dt, months, formatter);
}

private String plusMonths(DateTime dt, int months, String formatter)
{
return dt.plusMonths(months).toString(formatter);
}

public String minusMonths(String curr, int months)
{
return minusMonths(curr, months, this.DEFAULT_FORMATTER);
}

public String minusMonths(String curr, int months, String formatter)
{
DateTime dt = parseDate(curr);
return minusMonths(dt, months, formatter);
}

private String minusMonths(DateTime dt, int months, String formatter)
{
return dt.minusMonths(months).toString(formatter);
}

public String plusWeeks(String curr, int weeks)
{
return plusWeeks(curr, weeks, this.DEFAULT_FORMATTER);
}

public String plusWeeks(String curr, int weeks, String formatter)
{
DateTime dt = parseDate(curr);
return plusWeeks(dt, weeks, formatter);
}

private String plusWeeks(DateTime dt, int weeks, String formatter)
{
return dt.plusWeeks(weeks).toString(formatter);
}

public String minusWeeks(String curr, int weeks)
{
return minusWeeks(curr, weeks, this.DEFAULT_FORMATTER);
}

public String minusWeeks(String curr, int weeks, String formatter)
{
DateTime dt = parseDate(curr);
return minusWeeks(dt, weeks, formatter);
}

private String minusWeeks(DateTime dt, int weeks, String formatter)
{
return dt.minusWeeks(weeks).toString(formatter);
}

private DateTime parseDate(String strDate)
{
String cleanStr = strDate.replaceAll("[^0-9]", "");
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd");
return DateTime.parse(cleanStr, fmt);
}

public String getLastDayOfMonth(String curr)
{
DateTime dt = parseDate(curr);
return getLastDayOfMonth(dt, this.DEFAULT_FORMATTER);
}

public String getLastDayOfMonth(String curr, String formatter)
{
DateTime dt = parseDate(curr);
return getLastDayOfMonth(dt, formatter);
}

private String getLastDayOfMonth(DateTime dt, String formatter)
{
return dt.dayOfMonth().withMaximumValue().toString(formatter);
}

public String getFirstDayOfMonth(String curr)
{
DateTime dt = parseDate(curr);
return getFirstDayOfMonth(dt, this.DEFAULT_FORMATTER);
}

public String getFirstDayOfMonth(String curr, String formatter)
{
DateTime dt = parseDate(curr);
return getFirstDayOfMonth(dt, formatter);
}

private String getFirstDayOfMonth(DateTime dt, String formatter)
{
return dt.dayOfMonth().withMinimumValue().toString(formatter);
}

public String getLastDayOfWeek(String curr)
{
DateTime dt = parseDate(curr);
return getLastDayOfWeek(dt, this.DEFAULT_FORMATTER);
}

public String getLastDayOfWeek(String curr, String formatter)
{
DateTime dt = parseDate(curr);
return getLastDayOfWeek(dt, formatter);
}

private String getLastDayOfWeek(DateTime dt, String formatter)
{
return dt.dayOfWeek().withMaximumValue().toString(formatter);
}

public String getFirstDayOfWeek(String curr)
{
DateTime dt = parseDate(curr);
return getFirstDayOfWeek(dt, this.DEFAULT_FORMATTER);
}

public String getFirstDayOfWeek(String curr, String formatter)
{
DateTime dt = parseDate(curr);
return getFirstDayOfWeek(dt, formatter);
}

private String getFirstDayOfWeek(DateTime dt, String formatter)
{
return dt.dayOfWeek().withMinimumValue().toString(formatter);
}
}


DOLite:

package com.pingan;

/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public interface DOLite extends Iterable<String>{
public abstract String get(int paramInt);

public abstract int indexOf(String paramString);

public abstract int size();
}


DOLiteFactory:

package com.pingan;

/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public interface DOLiteFactory {

public abstract DOLite produce(String paramString)
throws Exception;
}


DOLiteImpl:

package com.pingan;

import java.util.Iterator;
import java.util.List;

/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public class DOLiteImpl implements DOLite {
private List<String> statements;

public DOLiteImpl(List<String> statements)
{
this.statements = statements;
}

public Iterator<String> iterator()
{
return this.statements.iterator();
}

public String get(int index)
{
return (String)this.statements.get(index);
}

public int indexOf(String statement)
{
return this.statements.indexOf(statement);
}

public int size()
{
return this.statements.size();
}
}


DOLParser:

package com.pingan;

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.name.Names;
import java.util.Iterator;

/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public class DOLParser extends AbstractModule {

protected void configure() {
bind(DOLiteFactory.class).to(VelocityDOLiteFactory.class);
bind(String.class).annotatedWith(Names.named("fileEncoding")).toInstance("utf-8");

bind(String.class).annotatedWith(Names.named("contextKeyPrefix")).toInstance("dolite.env.");
}

public static void main(String[] args)
{
Injector injector = Guice.createInjector(new Module[] { new DOLParser() });

DOLiteFactory factory = (DOLiteFactory)injector.getInstance(DOLiteFactory.class);
try
{
DOLite dolite = factory.produce("D:\\test\\store_sql\\dm_ppc_txn_info.dol_run");
Iterator<String> statements = dolite.iterator();
while (statements.hasNext()) {
System.out.println((String)statements.next() + ";");
}
System.exit(0);
}
catch (Exception e)
{
System.err.println(e.getMessage());
System.exit(250);
}
}
}


VelocityDOLiteFactory:

package com.pingan;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.text.StrBuilder;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;

/**
* Created by zhoushuilin140 on 2017/11/22.
*/
public class VelocityDOLiteFactory implements DOLiteFactory{
private String fileEncoding = "utf-8";
private String contextKeyPrefix = "dolite.env.";
private Properties props = System.getProperties();
private StrBuilder template;
private String[] statementStrings;

public DOLite produce(String fullPath)
throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, IOException
{
List<String> statements = loadTemplateFrom(new File(fullPath)).evaluateWithContext().createStatements();

return new DOLiteImpl(statements);
}

protected List<String> createStatements()
{
return Arrays.asList(this.statementStrings);
}

public String getFileEncoding()
{
return this.fileEncoding;
}

@Inject
public void setFileEncoding(@Named("fileEncoding") String fileEncoding)
{
this.fileEncoding = fileEncoding;
}

protected Context getContextFromProperties()
{
Map<String, String> env = new HashMap();
for (Object key : this.props.keySet()) {
if (key.toString().startsWith(this.contextKeyPrefix)) {
env.put(key.toString().substring(this.contextKeyPrefix.length()), this.props.get(key).toString());
}
}
Context context = new VelocityContext();
context.put("env", env);
DateTimeContext dtCtx = new DateTimeContext();
context.put("dt", dtCtx);
return context;
}

protected VelocityDOLiteFactory evaluateWithContext()
throws ParseErrorException, MethodInvocationException, ResourceNotFoundException, IOException
{
StringWriter writer = new StringWriter();
Velocity.addProperty("runtime.log", "");

Velocity.evaluate(getContextFromProperties(), writer, getClass().getSimpleName(), this.template.asReader());

this.statementStrings = writer.toString().split(";\\s*");
return this;
}

protected VelocityDOLiteFactory loadTemplateFrom(File file)
throws IOException
{
this.template = new StrBuilder(FileUtils.readFileToString(file, this.fileEncoding));

byte[] bom = { -17, -69, -65 };
if (this.template.toString().startsWith(new String(bom, "UTF8"))) {
this.template.delete(0, 1);
}
return this;
}

public String getContextKeyPrefix()
{
return this.contextKeyPrefix;
}

@Inject
public void setContextKeyPrefix(@Named("contextKeyPrefix") String contextKeyPrefix)
{
this.contextKeyPrefix = contextKeyPrefix;
}
}


JobInfo:

package com.pinganfu;

/**
* Created by ZHOUSHUILIN140 on 2017/12/5.
*/
public class JobInfo {
}


maven:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>com.pingan</groupId>
<artifactId>dolite</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.papay.DOLParser</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

</project>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: