dolite模板引擎开发
2017-12-15 14:56
330 查看
DateTimeContext:
DOLite:
DOLiteFactory:
DOLiteImpl:
DOLParser:
VelocityDOLiteFactory:
JobInfo:
maven:
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>
相关文章推荐
- javascript开发中必须的模板引擎技术文章收录(一)
- 基于Velocity开发自己的模板引擎
- 我的模板分析引擎类PHP的.net开发方法--功能介绍篇
- Node.js开发入门—使用jade模板引擎
- Tiny模板引擎之开发工具
- asp模板引擎终结者(WEB开发之ASP模式)
- 基于Velocity开发自己的模板引擎
- Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎
- 在javascriptl中使用表格模板引擎template.js简化开发
- 使用JST模板引擎加快页面交互内容开发
- 由浅入深:自己动手开发模板引擎——什么是模板引擎
- SimpleTemplate模板引擎开发
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(四)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- asp模板引擎终结者(WEB开发之ASP模式)
- CMS模板引擎系统的开发小结和未来发展的简单构思
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- Spring Boot Web开发 引擎模板(四)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)