From db39b501a154458bb77433f3f9712df94b8e8188 Mon Sep 17 00:00:00 2001 From: Bon-Yong Lee Date: Wed, 26 Sep 2012 14:06:50 +0900 Subject: [PATCH] [Title] Template Engine( Verrari ) Enhancement [Desc.] Restructure template engine [Issue] --- org.tizen.common.verrari/META-INF/MANIFEST.MF | 1 - .../org/tizen/common/verrari/IModelManager.java | 55 +++++ .../common/verrari/{model => }/IModelProvider.java | 38 +++- .../common/verrari/{template => }/ITemplate.java | 22 +- .../verrari/{engine => }/ITemplateEngine.java | 54 +++-- .../{model/IModel.java => ITemplateManager.java} | 100 +++++---- .../verrari/{template => }/ITemplateProvider.java | 37 ++-- .../verrari/engine/AbstractTemplateEngine.java | 151 ++++++-------- .../verrari/engine/TemplateEngineFactory.java | 62 ++++-- .../engine/freemarker/FreemarkerModelProvider.java | 75 +++++++ .../freemarker/FreemarkerTemplateEngine.java | 92 +++++---- .../freemarker/FreemarkerTemplateProvider.java | 139 +++++++++++++ .../verrari/engine/jsoup/JsoupTemplateEngine.java | 95 +++++---- ...{StaticModelProvider.java => ModelManager.java} | 56 +++-- .../tizen/common/verrari/model/ModelProvider.java | 116 +++++++++++ .../verrari/model/ModelProviderDelegate.java | 91 ++++++++ .../tizen/common/verrari/target/TargetGroup.java | 71 ------- .../tizen/common/verrari/target/TargetUnit.java | 102 --------- .../common/verrari/template/AbstractTemplate.java | 84 ++++++++ .../common/verrari/template/BufferFactory.java | 98 +++++++++ .../template/ClasspathResourceTemplate.java | 110 ++++++++++ .../common/verrari/template/FileTemplate.java | 36 ++-- .../verrari/template/FileTemplateProvider.java | 118 +++++++++++ .../common/verrari/template/InMemoryTemplate.java | 85 ++++++++ .../verrari/template/StaticTemplateProvider.java | 88 -------- .../TemplateManager.java} | 49 ++--- .../common/verrari/template/TemplateProvider.java | 114 ++++++++++ .../verrari/template/TemplateProviderDelegate.java | 110 ++++++++++ .../tizen/common/verrari/template/URLTemplate.java | 120 +++++++++++ .../verrari/engine/TemplateEngineFactoryTest.java | 1 + .../freemarker/FreemarkerTemplateEngineTest.java | 143 +++++++------ .../common/verrari/engine/freemarker/test.html | 47 ----- .../verrari/engine/freemarker/testTizenMulti.html | 0 .../verrari/engine/freemarker/testTizenSingle.html | 0 .../engine/freemarker/testTizenSingle2.html | 49 ----- .../engine/jsoup/JsoupTemplateEngineTest.java | 42 ++-- .../verrari/engine/jsoup/genTizenSingle.html | 0 .../common/verrari/target/TargetGruopTest.java | 165 --------------- .../common/verrari/target/TargetUnitTest.java | 230 --------------------- .../common/verrari/template/FileTemplateTest.java | 12 -- ...eProviderTest.java => TemplateManagerTest.java} | 57 +++-- org.tizen.common/META-INF/MANIFEST.MF | 6 + .../command/file/DirectoryCopyHandlingCommand.java | 1 - .../org/tizen/common/daemon/AbstractServer.java | 193 +++++++++++++++++ .../src/org/tizen/common/daemon/Server.java | 9 + .../src/org/tizen/common/daemon/ServerState.java | 13 ++ .../src/org/tizen/common/util/io/Buffer.java | 5 +- .../src/org/tizen/common/util/io/BufferPool.java | 0 org.tizen.common/test/src/log4j.xml | 2 +- .../tizen/common/config/ExpressionParserTest.java | 4 +- .../tizen/common/daemon/AbstractServerTest.java | 73 +++++++ 51 files changed, 2198 insertions(+), 1223 deletions(-) mode change 100644 => 100755 org.tizen.common.verrari/META-INF/MANIFEST.MF create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/IModelManager.java rename org.tizen.common.verrari/src/org/tizen/common/verrari/{model => }/IModelProvider.java (67%) rename org.tizen.common.verrari/src/org/tizen/common/verrari/{template => }/ITemplate.java (77%) rename org.tizen.common.verrari/src/org/tizen/common/verrari/{engine => }/ITemplateEngine.java (55%) rename org.tizen.common.verrari/src/org/tizen/common/verrari/{model/IModel.java => ITemplateManager.java} (64%) rename org.tizen.common.verrari/src/org/tizen/common/verrari/{template => }/ITemplateProvider.java (71%) mode change 100644 => 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/AbstractTemplateEngine.java mode change 100644 => 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/TemplateEngineFactory.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerModelProvider.java mode change 100644 => 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngine.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateProvider.java mode change 100644 => 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngine.java rename org.tizen.common.verrari/src/org/tizen/common/verrari/model/{StaticModelProvider.java => ModelManager.java} (57%) mode change 100644 => 100755 create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProvider.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProviderDelegate.java delete mode 100644 org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetGroup.java delete mode 100644 org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetUnit.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/AbstractTemplate.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/BufferFactory.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/ClasspathResourceTemplate.java mode change 100644 => 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplate.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplateProvider.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/InMemoryTemplate.java delete mode 100644 org.tizen.common.verrari/src/org/tizen/common/verrari/template/StaticTemplateProvider.java rename org.tizen.common.verrari/src/org/tizen/common/verrari/{model/MapModel.java => template/TemplateManager.java} (61%) mode change 100644 => 100755 create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProvider.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProviderDelegate.java create mode 100755 org.tizen.common.verrari/src/org/tizen/common/verrari/template/URLTemplate.java mode change 100644 => 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/TemplateEngineFactoryTest.java mode change 100644 => 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngineTest.java delete mode 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/test.html delete mode 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenMulti.html delete mode 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle.html delete mode 100644 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle2.html mode change 100644 => 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngineTest.java mode change 100644 => 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/genTizenSingle.html delete mode 100644 org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetGruopTest.java delete mode 100644 org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetUnitTest.java mode change 100644 => 100755 org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/FileTemplateTest.java rename org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/{StaticTemplateProviderTest.java => TemplateManagerTest.java} (66%) mode change 100644 => 100755 mode change 100644 => 100755 org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java create mode 100755 org.tizen.common/src/org/tizen/common/daemon/AbstractServer.java create mode 100755 org.tizen.common/src/org/tizen/common/daemon/Server.java create mode 100755 org.tizen.common/src/org/tizen/common/daemon/ServerState.java mode change 100644 => 100755 org.tizen.common/src/org/tizen/common/util/io/Buffer.java mode change 100644 => 100755 org.tizen.common/src/org/tizen/common/util/io/BufferPool.java create mode 100755 org.tizen.common/test/src/org/tizen/common/daemon/AbstractServerTest.java diff --git a/org.tizen.common.verrari/META-INF/MANIFEST.MF b/org.tizen.common.verrari/META-INF/MANIFEST.MF old mode 100644 new mode 100755 index a3df065..74751b6 --- a/org.tizen.common.verrari/META-INF/MANIFEST.MF +++ b/org.tizen.common.verrari/META-INF/MANIFEST.MF @@ -24,5 +24,4 @@ Export-Package: org.jsoup, org.tizen.common.verrari.engine.freemarker, org.tizen.common.verrari.engine.jsoup, org.tizen.common.verrari.model, - org.tizen.common.verrari.target, org.tizen.common.verrari.template diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/IModelManager.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/IModelManager.java new file mode 100755 index 0000000..19db8d7 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/IModelManager.java @@ -0,0 +1,55 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari; + + +/** + * IModelManager. + * + * Interface to add and remove model + * + * @author BonYong Lee{@literal } (S-Core) + */ +public interface +IModelManager +{ + /** + * add model + * + * @param key key to indicate model + * @param model model to be indicated by key + */ + void addModel( String key, Object model ); + + /** + * remove model + * + * @param key key to indicate model + */ + void removeModel( String key ); +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModelProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/IModelProvider.java similarity index 67% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModelProvider.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/IModelProvider.java index 37923c6..def0bf9 100755 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModelProvider.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/IModelProvider.java @@ -26,23 +26,43 @@ * */ -package org.tizen.common.verrari.model; +package org.tizen.common.verrari; + +import java.util.Collection; -import java.util.Map; /** * IModelProvider. * - * Management for models. + * Interface to provide models. * * @author ChangHyun Lee{@literal } (S-Core) */ -public interface IModelProvider { +public interface +IModelProvider +{ - void addModel(String key, IModel model); - IModel getModel(String key); - IModel removeModel(String key); - Map getModels(); + /** + * Check if no model + * + * @return flag if no model + */ boolean isEmpty(); - + + /** + * Reteurn keys for models + * + * @return keys + */ + Collection keys(); + + /** + * Return model to be indicated by key + * + * @param key key + * + * @return model + */ + Object getModel(String key); + } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplate.java similarity index 77% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplate.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplate.java index 02901dc..b06d78c 100755 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplate.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplate.java @@ -26,7 +26,7 @@ * */ -package org.tizen.common.verrari.template; +package org.tizen.common.verrari; import java.io.IOException; import java.io.InputStream; @@ -38,10 +38,22 @@ import java.io.InputStream; * * @author ChangHyun Lee{@literal } (S-Core) */ -public interface ITemplate { - - Object getContainer(); +public interface +ITemplate +{ + /** + * Return encoding for this template + * + * @return encoding + */ String getEncoding(); + + /** + * Open and return {@link InputStream} for template + * + * @return {@link InputStream} + * + * @throws IOException if template can't be read + */ InputStream open() throws IOException; - } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/ITemplateEngine.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateEngine.java similarity index 55% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/engine/ITemplateEngine.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateEngine.java index 65a83d8..2649d36 100755 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/ITemplateEngine.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateEngine.java @@ -26,38 +26,50 @@ * */ -package org.tizen.common.verrari.engine; +package org.tizen.common.verrari; + +import java.io.OutputStream; -import org.tizen.common.verrari.model.IModel; -import org.tizen.common.verrari.model.IModelProvider; -import org.tizen.common.verrari.target.TargetGroup; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.ITemplate; -import org.tizen.common.verrari.template.ITemplateProvider; /** * ITemplateEngine. * - * Common Template Engine Interface + * Template Engine Interface * * @author ChangHyun Lee{@literal } (S-Core) */ public interface ITemplateEngine { - void setTemplate(String key, ITemplate template); - ITemplate getTemplate(String key); + /** + * Return engine version + * + * @return version + */ + String getEngineVersion(); + + /** + * Return template provider used in engine + * + * @return {@link ITemplateProvider} + */ ITemplateProvider getTemplateProvider(); + + /** + * Set template provider to be used in engine + * + * @param provider {@link ITemplateProvider} + */ + void setTemplateProvider( ITemplateProvider provider ); - void setModel(String key, IModel model); - IModel getModel(String key); - IModelProvider getModelProvider(); - - void generate(TargetUnit unit) throws Exception; - void genearteGroup(TargetGroup group) throws Exception; - - void setSharedVariable(Object key, Object value); - Object getSharedVariable(Object key); - void clearSharedVariable(); - String getEngineVersion(); + /** + * Generate result for templateKey and write to output with modelProvider + * + * @param templateKey key of template to apply + * @param modelProvider model set + * @param output {@link OutputStream} to write + * + * @throws Exception If It can't create result + */ + void generate( String templateKey, IModelProvider modelProvider, OutputStream output ) throws Exception; } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModel.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateManager.java similarity index 64% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModel.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateManager.java index 7af4772..a0d1de9 100755 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/IModel.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateManager.java @@ -1,44 +1,56 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -package org.tizen.common.verrari.model; - -/** - * IModel. - * - * Common Model Interface - * - * @author ChangHyun Lee{@literal } (S-Core) - */ -public interface IModel { - - void put(Object key, Object value); - Object get(Object key); - Object getContainer(); - -} +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari; + + +/** + * ITemplateManager. + * + * Interface to add and remove template. + * + * @author ChangHyun Lee{@literal } (S-Core) + */ +public interface +ITemplateManager +{ + /** + * add template with key + * + * @param key key to indicate template + * @param template template to add + */ + void addTemplate( String key, ITemplate template ); + + /** + * remove template being indicated by key + * + * @param key key to indicate template + */ + void removeTemplate( String key ); + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplateProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateProvider.java similarity index 71% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplateProvider.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateProvider.java index 5a6b54a..544de88 100755 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ITemplateProvider.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/ITemplateProvider.java @@ -26,27 +26,40 @@ * */ -package org.tizen.common.verrari.template; +package org.tizen.common.verrari; + +import java.util.Collection; -import java.io.File; -import java.net.URI; -import java.util.Map; /** * ITemplateProvider. * - * Management for template. + * Interface to provide templates. * * @author ChangHyun Lee{@literal } (S-Core) */ public interface ITemplateProvider { - - void addTemplate(String key, ITemplate template); - void addTemplate(String key, URI templateURI); - void addTemplate(String key, File templateFile); - ITemplate getTemplate(String key); - ITemplate removeTemplate(String key); - Map getTemplates(); + + /** + * Check if no template + * + * @return flag if no template + */ boolean isEmpty(); + + /** + * Reteurn keys for templates + * + * @return keys + */ + Collection keys(); + /** + * Return template to be indicated by key + * + * @param key key + * + * @return {@link ITemplate} + */ + ITemplate getTemplate(String key); } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/AbstractTemplateEngine.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/AbstractTemplateEngine.java old mode 100644 new mode 100755 index 7aafb07..e04eed8 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/AbstractTemplateEngine.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/AbstractTemplateEngine.java @@ -28,104 +28,89 @@ package org.tizen.common.verrari.engine; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.tizen.common.verrari.model.IModel; -import org.tizen.common.verrari.model.IModelProvider; -import org.tizen.common.verrari.model.StaticModelProvider; -import org.tizen.common.verrari.target.TargetGroup; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.ITemplate; -import org.tizen.common.verrari.template.ITemplateProvider; -import org.tizen.common.verrari.template.StaticTemplateProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateEngine; +import org.tizen.common.verrari.ITemplateProvider; +import org.tizen.common.verrari.template.TemplateManager; +import org.tizen.common.verrari.template.TemplateProvider; /** * AbstractTemplateEngine. * - * Initialization for ITemplateProvider, IModelProvider and sharedVariables. + * common template engine * * @author ChangHyun Lee{@literal } (S-Core) */ -public abstract class AbstractTemplateEngine implements ITemplateEngine { - - protected IModelProvider modelProvider; +public abstract class +AbstractTemplateEngine +implements ITemplateEngine +{ + /** + * Logger for this instance + */ + protected final Logger logger = LoggerFactory.getLogger( getClass() ); + + /** + * {@link TemplateProvider} for this template engine + */ protected ITemplateProvider templateProvider; - protected HashMap sharedVariables; - - public AbstractTemplateEngine() { - modelProvider = new StaticModelProvider(); - templateProvider = new StaticTemplateProvider(); - sharedVariables = new HashMap(); - } - - @Override - public void setTemplate(String key, ITemplate template) { - templateProvider.addTemplate(key, template); + + public + AbstractTemplateEngine() + { + this( new TemplateManager() ); } - - @Override - public ITemplate getTemplate(String key) { - return templateProvider.getTemplate(key); + + /** + * Constructor with {@link TemplateProvider} + * @param templateProvider + */ + public + AbstractTemplateEngine( + final ITemplateProvider templateProvider + ) + { + setTemplateProvider( templateProvider ); } - + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#getTemplateProvider() + */ @Override - public ITemplateProvider getTemplateProvider() { + public + ITemplateProvider + getTemplateProvider() { return templateProvider; } - - @Override - public void setModel(String key, IModel model) { - modelProvider.addModel(key, model); - } - - @Override - public IModel getModel(String key) { - return modelProvider.getModel(key); - } - - @Override - public IModelProvider getModelProvider() { - return modelProvider; - } - - @Override - public void generate(TargetUnit unit) throws Exception { - applySharedVariable(); - } - - @Override - public void genearteGroup(TargetGroup group) throws Exception { - if (!group.isEmpty()) { - List targetList = group.getTargetUnits(); - for (TargetUnit unit : targetList) { - generate(unit); - } - } - } - - @Override - public void setSharedVariable(Object key, Object value) { - sharedVariables.put(key, value); - } - - @Override - public Object getSharedVariable(Object key) { - return sharedVariables.get(key); - } - + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#setTemplateProvider(org.tizen.common.verrari.ITemplateProvider) + */ @Override - public void clearSharedVariable() { - sharedVariables.clear(); + public + void + setTemplateProvider( + final ITemplateProvider provider + ) + { + this.templateProvider = provider; } - public void applySharedVariable() { - Map models = getModelProvider().getModels(); - for (IModel model : models.values()) { - for (Object key : sharedVariables.keySet()) { - model.put(key, sharedVariables.get(key)); - } - } + /** + * Return {@link ITemplate} for key + * + * @param key string to indicate template + * + * @return {@link ITemplate} to be indicated by key + */ + protected + ITemplate + getTemplate( + final String key + ) + { + return templateProvider.getTemplate( key ); } } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/TemplateEngineFactory.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/TemplateEngineFactory.java old mode 100644 new mode 100755 index ea1cc13..5706ead --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/TemplateEngineFactory.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/TemplateEngineFactory.java @@ -28,10 +28,14 @@ package org.tizen.common.verrari.engine; +import org.apache.commons.lang3.ClassUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.tizen.common.Factory; import org.tizen.common.FactoryWithArgument; +import org.tizen.common.util.io.BufferPool; +import org.tizen.common.verrari.ITemplateEngine; import org.tizen.common.verrari.engine.freemarker.FreemarkerTemplateEngine; -import org.tizen.common.verrari.engine.jsoup.JsoupTemplateEngine; /** * TemplateEngineFactory. @@ -40,22 +44,41 @@ import org.tizen.common.verrari.engine.jsoup.JsoupTemplateEngine; * * @author ChangHyun Lee{@literal } (S-Core) */ -@SuppressWarnings("rawtypes") -public class TemplateEngineFactory implements Factory ,FactoryWithArgument { +public class +TemplateEngineFactory +implements Factory ,FactoryWithArgument> +{ - protected static Factory instance; - static { - instance = new TemplateEngineFactory(); - } + /** + * Singline instance + */ + protected static TemplateEngineFactory instance = new TemplateEngineFactory(); + + /** + * Logger for this instance + */ + protected final Logger logger = LoggerFactory.getLogger( getClass() ); + + /** + * Buffer pool for template. Support high performance in/out + */ + protected final BufferPool bufferPool = new BufferPool(); /** * get template engine factory instance. * * @return TemplateEngineFactory */ - public static Factory getInstance() { + public static + TemplateEngineFactory + getInstance() { return instance; } + + /** + * Default constructor for child class + */ + protected TemplateEngineFactory() { } /** * Create Default template engine @@ -74,14 +97,25 @@ public class TemplateEngineFactory implements Factory ,FactoryW * @return ITemplateEngine {@link ITemplateEngine} */ @Override - public ITemplateEngine create(Class engineClass) { - if (FreemarkerTemplateEngine.class.equals(engineClass)) { - return new FreemarkerTemplateEngine(); - } else if (JsoupTemplateEngine.class.equals(engineClass)) { - return new JsoupTemplateEngine(); - } else { + public ITemplateEngine create( final Class engineClass) { + if ( null == engineClass ) + { return null; } + if ( ClassUtils.isAssignable( engineClass, ITemplateEngine.class ) ) + { + try + { + return (ITemplateEngine) engineClass.newInstance(); + } catch ( final InstantiationException e ) + { + logger.warn( "Engine class can't be instantiated:", e ); + } catch ( final IllegalAccessException e ) + { + logger.warn( "Engine class can't be accessible:", e ); + } + } + return null; } } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerModelProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerModelProvider.java new file mode 100755 index 0000000..9a2e682 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerModelProvider.java @@ -0,0 +1,75 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.engine.freemarker; + +import org.tizen.common.verrari.IModelProvider; +import org.tizen.common.verrari.model.ModelProviderDelegate; + +/** + * FreemarkerModelProvider. + * + * adapter between {@link IModelProvider} and Bean for freemarker. + * + * @author BonYong Lee{@literal } (S-Core) + * + * @see ModelProviderDelegate + */ +public class +FreemarkerModelProvider +extends ModelProviderDelegate +{ + /** + * Constructor with delegate + * + * @param modelProvider {@link IModelProvider} + */ + public + FreemarkerModelProvider( + final IModelProvider modelProvider + ) + { + super( modelProvider ); + } + + /** + * getter for freemarker engine + * + * @param key key for model + * + * @return model to be indicate by key + */ + public + Object + get( + final String key + ) + { + return this.modelProvider.getModel( key ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngine.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngine.java old mode 100644 new mode 100755 index 00c9314..2e58b16 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngine.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngine.java @@ -28,14 +28,13 @@ package org.tizen.common.verrari.engine.freemarker; -import java.io.BufferedWriter; -import java.util.Locale; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import org.tizen.common.util.FreeMarkerUtil; +import org.tizen.common.verrari.IModelProvider; +import org.tizen.common.verrari.ITemplateProvider; import org.tizen.common.verrari.engine.AbstractTemplateEngine; -import org.tizen.common.verrari.model.MapModel; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.FileTemplate; import freemarker.template.Configuration; import freemarker.template.Template; @@ -48,45 +47,66 @@ import freemarker.template.Template; */ public class FreemarkerTemplateEngine extends AbstractTemplateEngine { - protected Configuration cfg; + /** + * Freemarker configuration + */ + protected final Configuration cfg = FreeMarkerUtil.getDefaultConfiguration(); - public FreemarkerTemplateEngine() { - cfg = FreeMarkerUtil.getDefaultConfiguration(); + /* (non-Javadoc) + * @see org.tizen.common.verrari.engine.AbstractTemplateEngine#setTemplateProvider(org.tizen.common.verrari.ITemplateProvider) + */ + @Override + public void setTemplateProvider( + final ITemplateProvider provider + ) + { + super.setTemplateProvider( provider ); + cfg.setTemplateLoader( new FreemarkerTemplateProvider( provider ) ); } - public Configuration getConfiguration() { + /** + * return {@link Configuration} for freemarker engine + * + * @return {@link Configuration} + */ + public + Configuration + getConfiguration() + { return cfg; } - @Override - public void generate(TargetUnit unit) throws Exception { - super.generate(unit); - MapModel model = (MapModel) getModel(unit.getModelKey()); - if (null == model) { - throw new Exception("Model is Empty."); - } - - FileTemplate template = (FileTemplate) getTemplate(unit.getTemplateKey()); - if (null == template) { - throw new Exception("Template is Empty."); - } - Template freemarkerTemplate = cfg.getTemplate(template.getContainer().getPath()); - cfg.setEncoding(Locale.getDefault(), unit.getEncoding()); - - freemarkerTemplate.process(model.getContainer(), new BufferedWriter(unit.getWriter())); - //freemarkertemp.process(model.getModel(), new OutputStreamWriter(System.out)); - - // TODO:: XML Parser -// Map root = new HashMap(); -// NodeModel model2 = NodeModel.parse(new File("template/html/test.xml")); -// root.put("doc", model2); - + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#getEngineVersion() + */ + @Override + public + String + getEngineVersion() + { + return Configuration.getVersionNumber(); } - @SuppressWarnings("static-access") - @Override - public String getEngineVersion() { - return cfg.getVersionNumber(); + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#generate(java.lang.String, org.tizen.common.verrari.IModelProvider, java.io.OutputStream) + */ + @Override + public + void + generate( + final String templateKey, + final IModelProvider modelProvider, + final OutputStream output + ) + throws Exception + { + final Template freemarkerTemplate = cfg.getTemplate( templateKey ); + if ( null == freemarkerTemplate ) + { + logger.error( "Template is null for {}", templateKey ); + } + final IModelProvider adapter = new FreemarkerModelProvider( modelProvider ); + freemarkerTemplate.process( adapter, new OutputStreamWriter( output ) ); } } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateProvider.java new file mode 100755 index 0000000..fb2acd0 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateProvider.java @@ -0,0 +1,139 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.engine.freemarker; + +import static org.tizen.common.util.IOUtil.tryClose; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.HashMap; + +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateProvider; +import org.tizen.common.verrari.template.TemplateProviderDelegate; + +import freemarker.cache.TemplateLoader; + +/** + * FreemarkerTemplateProvider. + * + * adapter between {@link ITemplateProvider} and {@link TemplateLoader} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +FreemarkerTemplateProvider +extends TemplateProviderDelegate +implements TemplateLoader +{ + /** + * Not closed reader + */ + protected HashMap key2reader = new HashMap(); + + /** + * Constructor with {@link ITemplateProvider} + * + * @param provider real {@link ITemplateProvider} + */ + public + FreemarkerTemplateProvider( + final ITemplateProvider provider + ) + { + super(provider); + } + + /* (non-Javadoc) + * @see freemarker.cache.TemplateLoader#findTemplateSource(java.lang.String) + */ + @Override + public + Object + findTemplateSource( + final String key + ) + throws IOException + { + logger.info( "Find template source for {}", key ); + return getTemplate( key ); + } + + /* (non-Javadoc) + * @see freemarker.cache.TemplateLoader#getLastModified(java.lang.Object) + */ + @Override + public + long + getLastModified( + final Object key + ) + { + // Not support in case of dynamic change + return 0; + } + + /* (non-Javadoc) + * @see freemarker.cache.TemplateLoader#getReader(java.lang.Object, java.lang.String) + */ + @Override + public + Reader + getReader( + final Object templateObj, + final String encoding + ) + throws IOException + { + logger.info( "Open template source for {}", templateObj ); + + final ITemplate template = (ITemplate) templateObj; + final Reader ret = new InputStreamReader( template.open(), template.getEncoding() ); + + tryClose( key2reader.put( templateObj, ret ) ); + return ret; + } + + /* (non-Javadoc) + * @see freemarker.cache.TemplateLoader#closeTemplateSource(java.lang.Object) + */ + @Override + public + void + closeTemplateSource( + final Object templateObj + ) + throws IOException + { + logger.info( "Close template source for {}", templateObj ); + key2reader.remove( templateObj ).close(); + } + + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngine.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngine.java old mode 100644 new mode 100755 index 21cb6ca..81c33a0 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngine.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngine.java @@ -28,9 +28,7 @@ package org.tizen.common.verrari.engine.jsoup; -import java.io.File; -import java.io.Writer; -import java.util.Map; +import java.io.OutputStream; import org.jsoup.Jsoup; import org.jsoup.nodes.Attribute; @@ -38,47 +36,66 @@ import org.jsoup.nodes.Attributes; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; +import org.tizen.common.verrari.IModelProvider; +import org.tizen.common.verrari.ITemplate; import org.tizen.common.verrari.engine.AbstractTemplateEngine; -import org.tizen.common.verrari.model.MapModel; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.FileTemplate; /** * JsoupTemplateEngine. + * * HTML Parser. * * @author ChangHyun Lee{@literal } (S-Core) */ -public class JsoupTemplateEngine extends AbstractTemplateEngine { - - public JsoupTemplateEngine() { +public class +JsoupTemplateEngine +extends AbstractTemplateEngine +{ + /** + * dummy base uri for HTML dom + */ + protected static final String BASE_URI = "http://www.tizen.org/sdk/ide/verrari"; + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#getEngineVersion() + */ + @Override + public + String + getEngineVersion() + { + // FIXME:: + // Platform.getBundle("org.jsoup").getHeaders().get("Bundle-Version"); + return "1.6.3"; } + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateEngine#generate(java.lang.String, org.tizen.common.verrari.IModelProvider, java.io.OutputStream) + */ @Override - public void generate(TargetUnit unit) throws Exception { - super.generate(unit); - - MapModel model = (MapModel) getModel(unit.getModelKey()); - if (null == model) { - throw new Exception("Model is Empty."); - } - - FileTemplate template = (FileTemplate) getTemplate(unit.getTemplateKey()); - if (null == template) { - throw new Exception("Template is Empty."); + public void generate( + String templateKey, + IModelProvider modelProvider, + OutputStream output + ) throws Exception + { + logger.trace( "Template Key :{}, Models :{}", templateKey, modelProvider ); + final ITemplate template = getTemplate( templateKey ); + logger.debug( "Template :{}", template ); + + if ( null == template ) + { + logger.error( "Template is null for {}", templateKey ); } - - generate(template.getContainer(), (Map) model.getContainer(), template.getEncoding(), unit.getWriter()); - } - - public Document generate(File template, Map model, String encoding) throws Exception { - Document doc = Jsoup.parse(template, encoding); - Map root = (Map) model; - for (Map.Entry entry : root.entrySet()) { - Elements elements = doc.select((String) entry.getKey()); + final Document doc = + Jsoup.parse( template.open(), template.getEncoding(), BASE_URI ); + + for ( String key : modelProvider.keys() ) { + Elements elements = doc.select( key ); if (!elements.isEmpty()) { Element element = elements.get(0); - Object attr = entry.getValue() ; + + Object attr = modelProvider.getModel( key ); if (attr instanceof Attribute) { element.attr(((Attribute) attr).getKey(), ((Attribute) attr).getValue()); } else if (attr instanceof Attributes){ @@ -87,24 +104,14 @@ public class JsoupTemplateEngine extends AbstractTemplateEngine { element.attr(attribute.getKey(), attribute.getValue());; } } else { - element.attr((String)entry.getKey(), (String)attr); + element.attr( key, (String)attr); } } } - return doc; - } - - public void generate(File template, Map model, String encoding, Writer write) throws Exception { - Document doc = generate(template, model, encoding); - write.write(doc.html()); - write.flush(); - } + + output.write( doc.html().getBytes( template.getEncoding() ) ); + output.flush(); - @Override - public String getEngineVersion() { - // FIXME:: - // Platform.getBundle("org.jsoup").getHeaders().get("Bundle-Version"); - return "1.6.3"; } } \ No newline at end of file diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/StaticModelProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelManager.java old mode 100644 new mode 100755 similarity index 57% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/model/StaticModelProvider.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelManager.java index 1932fb1..77ead2a --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/StaticModelProvider.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelManager.java @@ -28,47 +28,39 @@ package org.tizen.common.verrari.model; -import java.util.HashMap; -import java.util.Map; +import org.tizen.common.verrari.IModelManager; + /** - * StaticModelProvider. + * ModelManager. * * Manage the models. * - * @author ChangHyun Lee{@literal } (S-Core) + * @author BonYong Lee{@literal } (S-Core) */ -public class StaticModelProvider implements IModelProvider { - - protected Map models; - - public StaticModelProvider() { - models = new HashMap(); - } - - @Override - public void addModel(String key, IModel model) { - models.put(key, model); - } - +public class +ModelManager +extends ModelProvider +implements IModelManager +{ + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelManager#addModel(java.lang.String, java.lang.Object) + */ @Override - public IModel getModel(String key) { - return models.get(key); + public void addModel( final String key, final Object model ) + { + this.models.put( key, model ); + } + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelManager#removeModel(java.lang.String) + */ @Override - public IModel removeModel(String key) { - return models.remove(key); + public void removeModel( final String key ) + { + this.models.remove( key ); + } - - @Override - public Map getModels() { - return models; - } - - @Override - public boolean isEmpty() { - return models.isEmpty(); - } - } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProvider.java new file mode 100755 index 0000000..35866e3 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProvider.java @@ -0,0 +1,116 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.model; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.tizen.common.config.Preference; +import org.tizen.common.verrari.IModelProvider; + +/** + * ModelProvider. + * + * Simple implementation for {@link IModelProvider} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +ModelProvider +implements IModelProvider +{ + /** + * model container + */ + protected Map models = new HashMap(); + + /** + * Default constructor + */ + public + ModelProvider() + { + this( new HashMap() ); + } + + /** + * Constructor with {@link Map} containing model infos + * + * @param models {@link Map} + */ + public + ModelProvider( + final Map models + ) + { + this.models = models; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#getModel(java.lang.String) + */ + @Override + public + Object + getModel( + final String key + ) + { + if ( models.containsKey( key ) ) + { + return models.get( key ); + } + + return Preference.getValue( key, null ); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#isEmpty() + */ + @Override + public + boolean + isEmpty() + { + return models.isEmpty(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#keys() + */ + @Override + public + Collection + keys() + { + return Collections.unmodifiableCollection( models.keySet() ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProviderDelegate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProviderDelegate.java new file mode 100755 index 0000000..9750add --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/model/ModelProviderDelegate.java @@ -0,0 +1,91 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.model; + +import java.util.Collection; + +import org.tizen.common.verrari.IModelProvider; + +/** + * ModelProviderDelegate. + * + * Delegate object of {@link IModelProvider} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +ModelProviderDelegate +implements IModelProvider +{ + /** + * real {@link IModelProvider} + */ + protected IModelProvider modelProvider; + + /** + * Construcotor with real object + * + * @param modelProvider real {@link IModelProvider} + */ + protected + ModelProviderDelegate( + final IModelProvider modelProvider + ) + { + this.modelProvider = modelProvider; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#isEmpty() + */ + @Override + public boolean isEmpty() + { + return this.modelProvider.isEmpty(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#keys() + */ + @Override + public Collection keys() + { + return this.modelProvider.keys(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.IModelProvider#getModel(java.lang.String) + */ + @Override + public Object getModel(String key) + { + return this.modelProvider.getModel( key ); + } + + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetGroup.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetGroup.java deleted file mode 100644 index 3135c74..0000000 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetGroup.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -package org.tizen.common.verrari.target; - -import java.util.ArrayList; -import java.util.List; - -/** - * TargetGroup - * - * Targetunits management. - * - * @author ChangHyun Lee{@literal } (S-Core) - */ -public class TargetGroup { - - protected List units; - - public TargetGroup() { - units = new ArrayList(); - } - - public List getTargetUnits() { - return units; - } - - public boolean addTargetUnit(TargetUnit unit) { - if (unit != null) { - return units.add(unit); - } - return false; - } - - public boolean removeTargetunit(TargetUnit unit) { - if (unit != null) { - return units.remove(unit); - } - return false; - } - - public boolean isEmpty() { - return units.isEmpty(); - } - -} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetUnit.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetUnit.java deleted file mode 100644 index 961aed1..0000000 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/target/TargetUnit.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -package org.tizen.common.verrari.target; - -import java.io.Writer; - -/** - * TargetUnit. - * - * Single file management. - * - * @author ChangHyun Lee{@literal } (S-Core) - */ -public class TargetUnit { - - private String templateKey; - private String modelKey; - private Writer out; - private String encoding; - - public TargetUnit(String templateKey, String modelKey, Writer out, String encoding) { - if (templateKey == null || templateKey.isEmpty() || modelKey == null || modelKey.isEmpty() || out == null) { - throw new IllegalArgumentException(); - } - - if (null == encoding || encoding.isEmpty()) { - encoding = System.getProperty("file.encoding"); - } - - this.templateKey = templateKey; - this.modelKey = modelKey; - this.out = out; - this.encoding = encoding; - } - - public void setTemplateKey(String templateKey) { - if (templateKey != null && !templateKey.isEmpty()) { - this.templateKey = templateKey; - } - } - - public String getTemplateKey() { - return templateKey; - } - - public void setModelKey(String modelKey) { - if (modelKey != null && !modelKey.isEmpty()) { - this.modelKey = modelKey; - } - } - - public String getModelKey() { - return modelKey; - } - - public void setWriter(Writer out) { - if (out != null) { - this.out = out; - } - } - - public Writer getWriter() { - return out; - } - - public void setEncoding(String encoding) { - if (encoding != null && !encoding.isEmpty()) { - this.encoding = encoding; - } - } - - public String getEncoding() { - return encoding; - } - -} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/AbstractTemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/AbstractTemplate.java new file mode 100755 index 0000000..c648426 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/AbstractTemplate.java @@ -0,0 +1,84 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import org.tizen.common.config.Preference; +import org.tizen.common.verrari.ITemplate; + + +/** + * AbstractTemplate. + * + * Common template for {@link ITemplate} + * + * @author BonYong Lee{@literal } (S-Core) + */ +abstract public class +AbstractTemplate +implements ITemplate +{ + /** + * encoding for this template + */ + protected String encoding; + + /** + * Default constructor + */ + public + AbstractTemplate() + { + this( Preference.getValue( "file.encoding", null ) ); //$NON-NLS-1$ + } + + /** + * Constructor with encoding + * + * @param encoding encoding for this template + */ + public + AbstractTemplate( + final String encoding + ) + { + this.encoding = encoding; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplate#getEncoding() + */ + @Override + public + String + getEncoding() + { + return encoding; + } + + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/BufferFactory.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/BufferFactory.java new file mode 100755 index 0000000..13540e3 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/BufferFactory.java @@ -0,0 +1,98 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.io.IOException; + +import org.tizen.common.Factory; +import org.tizen.common.FactoryWithArgument; +import org.tizen.common.util.io.Buffer; +import org.tizen.common.util.io.BufferPool; + +/** + * BufferFactory. + * + * Factory to create {@link Buffer} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +BufferFactory +extends BufferPool +implements Factory, FactoryWithArgument +{ + /** + * Singleton instance + */ + protected static BufferFactory instance = new BufferFactory(); + + /** + * singleton interface + * + * @return singleton instance + */ + public static BufferFactory getInstance() + { + return instance; + } + + /* (non-Javadoc) + * @see org.tizen.common.FactoryWithArgument#create(java.lang.Object) + */ + @Override + public + Buffer + create( + final byte[] arg + ) + { + try + { + final Buffer buffer = create(); + buffer.write( arg ); + + return buffer; + } + catch ( final IOException e ) + { + throw new IllegalStateException( e ); + } + } + + /* (non-Javadoc) + * @see org.tizen.common.Factory#create() + */ + @Override + public + Buffer + create() + { + return new Buffer( this ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ClasspathResourceTemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ClasspathResourceTemplate.java new file mode 100755 index 0000000..71216d5 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/ClasspathResourceTemplate.java @@ -0,0 +1,110 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.io.IOException; +import java.io.InputStream; + +import org.tizen.common.verrari.ITemplate; + +/** + * ClasspathResourceTemplate. + * + * {@link ITemplate} to load from classpath resource + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +ClasspathResourceTemplate +extends AbstractTemplate +implements ITemplate +{ + /** + * relative path from classpath root + */ + protected final String path; + + /** + * {@link ClassLoader} to search in + */ + protected final ClassLoader loader; + + /** + * Constructor with resource path and class + * + * @param path resource path relative to classpath root + * @param clazz class to search in + * + * @see #ClasspathResourceTemplate(String, ClassLoader) + */ + public + ClasspathResourceTemplate( + final String path, + final Class clazz + ) + { + this( path, clazz.getClassLoader() ); + } + + /** + * Constructor with resource path and classloader + * + * @param path resource path relative to classpath root + * @param loader classloader to search in + */ + public + ClasspathResourceTemplate( + final String path, + final ClassLoader loader + ) + { + if ( null == path ) + { + throw new NullPointerException(); + } + if ( null == loader ) + { + throw new NullPointerException(); + } + this.path = path; + this.loader = loader; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplate#open() + */ + @Override + public + InputStream + open() + throws IOException + { + return loader.getResourceAsStream( path ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplate.java old mode 100644 new mode 100755 index c30457d..13ad78b --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplate.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplate.java @@ -33,6 +33,8 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import org.tizen.common.verrari.ITemplate; + /** * FileTemplate. * @@ -40,28 +42,32 @@ import java.io.InputStream; * * @author ChangHyun Lee{@literal } (S-Core) */ -public class FileTemplate implements ITemplate { +public class FileTemplate +extends AbstractTemplate +implements ITemplate { + /** + * File to load template from + */ protected File file; - protected String encoding; - public FileTemplate(File file) { + public + FileTemplate( + final File file + ) + { this.file = file; - this.encoding = System.getProperty("file.encoding"); //$NON-NLS-1$ - } - - @Override - public File getContainer() { - return file; - } - - @Override - public String getEncoding() { - return encoding; } + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplate#open() + */ @Override - public InputStream open() throws IOException { + public + InputStream + open() + throws IOException + { return new FileInputStream(file); } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplateProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplateProvider.java new file mode 100755 index 0000000..5f2a962 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/FileTemplateProvider.java @@ -0,0 +1,118 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import static org.tizen.common.util.ArrayUtil.size; + +import java.io.File; +import java.util.Collection; + +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateProvider; + +/** + * FileTemplateProvider. + * + * {@link ITemplateProvider} to provide file template using root {@link File} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +FileTemplateProvider +implements ITemplateProvider +{ + /** + * root {@link File} + */ + protected File root; + + /** + * Default constructor + */ + public + FileTemplateProvider() + { + this( new File( "." ) ); + } + + /** + * Constructor with root {@link File} + * + * @param root root {@link File} + */ + public + FileTemplateProvider( + final File root + ) + { + this.root = root; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#isEmpty() + */ + @Override + public boolean isEmpty() + { + return 0 == size( root.list() ); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#keys() + */ + @Override + public + Collection + keys() + { + // File tree iteration costs too heavy load + throw new UnsupportedOperationException(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#getTemplate(java.lang.String) + */ + @Override + public + ITemplate + getTemplate( + final String key + ) + { + final File file = new File( key ); + if ( file.isAbsolute() ) + { + return new FileTemplate( file ); + } + else + { + return new FileTemplate( new File( root, key ) ); + } + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/InMemoryTemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/InMemoryTemplate.java new file mode 100755 index 0000000..a5e25cd --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/InMemoryTemplate.java @@ -0,0 +1,85 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.io.IOException; +import java.io.InputStream; + +import org.tizen.common.FactoryWithArgument; +import org.tizen.common.util.io.Buffer; +import org.tizen.common.util.io.BufferInputStream; +import org.tizen.common.verrari.ITemplate; + +/** + * InMemoryTemplate. + * + * {@link ITemplate} to load from memory + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +InMemoryTemplate +extends AbstractTemplate +implements ITemplate +{ + /** + * contents buffer + */ + protected Buffer buffer; + + /** + * Constructor with contents, encoding and buffer factory + * + * @param contents byte[] to store + * @param encoding encoding of contents + * @param bufferFactory buffer factory + */ + public + InMemoryTemplate( + final byte[] contents, + final String encoding, + FactoryWithArgument bufferFactory + ) + { + super( encoding ); + buffer = bufferFactory.create( contents ); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplate#open() + */ + @Override + public + InputStream + open() + throws IOException + { + return new BufferInputStream( buffer ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/StaticTemplateProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/StaticTemplateProvider.java deleted file mode 100644 index 8b9e573..0000000 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/StaticTemplateProvider.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -package org.tizen.common.verrari.template; - -import java.io.File; -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - -/** - * StaticTemplateProvider. - * - * Manage the templates. - * - * @author ChangHyun Lee{@literal } (S-Core) - */ -public class StaticTemplateProvider implements ITemplateProvider { - - protected Map templates; - - public StaticTemplateProvider() { - templates = new HashMap(); - } - - @Override - public void addTemplate(String key, ITemplate template) { - templates.put(key, template); - } - - @Override - public void addTemplate(String key, URI templateURI) { - File file = new File(templateURI); - addTemplate(key, file); - } - - @Override - public void addTemplate(String key, File templateFile) { - ITemplate fileTemplate = new FileTemplate(templateFile); - templates.put(key, fileTemplate); - } - - @Override - public ITemplate getTemplate(String key) { - return templates.get(key); - } - - @Override - public ITemplate removeTemplate(String key) { - return templates.remove(key); - } - - @Override - public Map getTemplates() { - return templates; - } - - @Override - public boolean isEmpty() { - return templates.isEmpty(); - } - -} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/MapModel.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateManager.java old mode 100644 new mode 100755 similarity index 61% rename from org.tizen.common.verrari/src/org/tizen/common/verrari/model/MapModel.java rename to org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateManager.java index 25986c6..738f361 --- a/org.tizen.common.verrari/src/org/tizen/common/verrari/model/MapModel.java +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateManager.java @@ -26,46 +26,37 @@ * */ -package org.tizen.common.verrari.model; +package org.tizen.common.verrari.template; + +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateManager; -import java.util.Map; /** - * MapModel. + * StaticTemplateProvider. * - * IModel implementation by map. + * Manage the templates. * * @author ChangHyun Lee{@literal } (S-Core) */ -public class MapModel implements IModel { - - protected Map model; - - public MapModel(Map map) { - this.model = map; - } - - @Override - public Object get(Object key) { - return model.get(key); - } - +public class TemplateManager +extends TemplateProvider +implements ITemplateManager +{ @Override - public Object getContainer() { - return model; + public void addTemplate( final String key, final ITemplate template ) + { + if ( this.templates.containsKey( key ) ) + { + throw new IllegalArgumentException( key + " is duplicated" ); + } + this.templates.put( key, template ); } @Override - public void put(Object key, Object value) { - model.put(key, value); - } - - public Object remove(Object key) { - return model.remove(key); - } - - public boolean isEmpty() { - return model.isEmpty(); + public void removeTemplate( final String key ) + { + this.templates.remove( key ); } } diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProvider.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProvider.java new file mode 100755 index 0000000..d72b203 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProvider.java @@ -0,0 +1,114 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateProvider; + +/** + * TemplateProvider. + * + * Simple implementation for {@link ITemplateProvider} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +TemplateProvider +implements ITemplateProvider +{ + + /** + * template container + */ + protected Map templates; + + /** + * Default constructor + */ + public + TemplateProvider() + { + this( new HashMap() ); + } + + /** + * Constructor with {@link Map} containing template info + * + * @param templates {@link Map} + */ + public + TemplateProvider( + final Map templates + ) + { + if ( null == templates ) + { + throw new NullPointerException(); + } + this.templates = templates; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#getTemplate(java.lang.String) + */ + @Override + public + ITemplate + getTemplate(String key) + { + return templates.get( key ); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#isEmpty() + */ + @Override + public + boolean + isEmpty() + { + return templates.isEmpty(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#keys() + */ + @Override + public + Collection + keys() + { + return Collections.unmodifiableCollection( templates.keySet() ); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProviderDelegate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProviderDelegate.java new file mode 100755 index 0000000..c072a1b --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/TemplateProviderDelegate.java @@ -0,0 +1,110 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.util.Collection; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.tizen.common.verrari.ITemplate; +import org.tizen.common.verrari.ITemplateProvider; + +/** + * TemplateProviderDelegate. + * + * delegate of {@link ITemplateProvider} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +TemplateProviderDelegate +implements ITemplateProvider +{ + /** + * Logger for this instance + */ + protected final Logger logger = LoggerFactory.getLogger( getClass() ); + + /** + * reald {@link ITemplateProvider} + */ + protected final ITemplateProvider provider; + + /** + * Constructor with real object + * + * @param provider real {@link ITemplateProvider} + */ + protected + TemplateProviderDelegate( + final ITemplateProvider provider + ) + { + if ( null == provider ) + { + throw new NullPointerException(); + } + this.provider = provider; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#getTemplate(java.lang.String) + */ + @Override + public + ITemplate + getTemplate( + final String key + ) + { + return provider.getTemplate(key); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#isEmpty() + */ + @Override + public + boolean + isEmpty() + { + return provider.isEmpty(); + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplateProvider#keys() + */ + @Override + public + Collection + keys() + { + return provider.keys(); + } + +} diff --git a/org.tizen.common.verrari/src/org/tizen/common/verrari/template/URLTemplate.java b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/URLTemplate.java new file mode 100755 index 0000000..345bda5 --- /dev/null +++ b/org.tizen.common.verrari/src/org/tizen/common/verrari/template/URLTemplate.java @@ -0,0 +1,120 @@ +/* + * Verrari - TemplateEngine + * + * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Changhyun Lee + * Hyeongseok Heo + * Kangho Kim + * BonYong Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.common.verrari.template; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; + +import org.tizen.common.verrari.ITemplate; + +/** + * URLTemplate. + * + * {@link ITemplate} to load using {@link URL} + * + * @author BonYong Lee{@literal } (S-Core) + */ +public class +URLTemplate +extends AbstractTemplate +implements ITemplate +{ + /** + * {@link URL} to indicate template location + */ + protected final URL url; + + /** + * Consructor with url string + * + * @param url url string + * + * @throws MalformedURLException if url is invalid + * + * @see #URLTemplate(URL) + */ + public + URLTemplate( + final String url + ) + throws MalformedURLException + { + this( new URL( url ) ); + } + + /** + * Constructor with url + * + * @param url {@link URL} + * + * @see #URLTemplate(URL, String) + */ + public + URLTemplate( + final URL url + ) + { + this( url, null ); + } + + /** + * Constructor with url and encoding + * + * @param url {@link URL} + * @param encoding encoding + */ + public + URLTemplate( + final URL url, + final String encoding + ) + { + super( encoding ); + if ( null == url ) + { + throw new NullPointerException(); + } + this.url = url; + } + + /* (non-Javadoc) + * @see org.tizen.common.verrari.ITemplate#open() + */ + @Override + public + InputStream + open() + throws IOException + { + return url.openStream(); + } + + +} diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/TemplateEngineFactoryTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/TemplateEngineFactoryTest.java old mode 100644 new mode 100755 index 016f00b..66280c5 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/TemplateEngineFactoryTest.java +++ b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/TemplateEngineFactoryTest.java @@ -32,6 +32,7 @@ import static org.junit.Assert.assertNull; import org.junit.Test; import org.tizen.common.Factory; +import org.tizen.common.verrari.ITemplateEngine; import org.tizen.common.verrari.engine.freemarker.FreemarkerTemplateEngine; import org.tizen.common.verrari.engine.jsoup.JsoupTemplateEngine; diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngineTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngineTest.java old mode 100644 new mode 100755 index 0dbf9dc..c30eb58 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngineTest.java +++ b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/FreemarkerTemplateEngineTest.java @@ -27,17 +27,18 @@ */ package org.tizen.common.verrari.engine.freemarker; -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.util.HashMap; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; import org.junit.Test; -import org.tizen.common.verrari.model.MapModel; -import org.tizen.common.verrari.target.TargetGroup; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.FileTemplate; -import org.tizen.common.verrari.template.ITemplate; +import org.tizen.common.config.Preference; +import org.tizen.common.verrari.model.ModelManager; +import org.tizen.common.verrari.template.BufferFactory; +import org.tizen.common.verrari.template.ClasspathResourceTemplate; +import org.tizen.common.verrari.template.InMemoryTemplate; +import org.tizen.common.verrari.template.TemplateManager; /** * FreemarkerTemplateEngineTest. @@ -72,57 +73,83 @@ public class FreemarkerTemplateEngineTest { @Test public void test_generate() throws Exception { FreemarkerTemplateEngine engine = new FreemarkerTemplateEngine(); - engine.setSharedVariable("description_date", "2012"); - engine.setSharedVariable("description_author", "changhyun1.lee@samsung.com"); - - ITemplate template = new FileTemplate(new File("./test/src/org/tizen/common/verrari/engine/freemarker/test_html.ftl")); - engine.getTemplateProvider().addTemplate("testHtmlTemplate", template); - - MapModel mapModel = new MapModel(new HashMap()); - mapModel.put("index_html_title", "Tizen Empty"); - engine.getModelProvider().addModel("testEmptyModel", mapModel); - - MapModel mapModel2 = new MapModel(new HashMap()); - mapModel2.put("index_html_title", "Tizen Web UI FW - Single"); - mapModel2.put("TizenWebUIFW_Enable", ""); - mapModel2.put("head_script_tizenwebuifw", head); - mapModel2.put("test_html_body_tizenwebuifw_single", ""); - engine.getModelProvider().addModel("testTizenSingleModel", mapModel2); - - MapModel mapModel3 = new MapModel(new HashMap()); - mapModel3.put("index_html_title", "Tizen Web UI FW - Multi"); - mapModel3.put("TizenWebUIFW_Enable", ""); - mapModel3.put("head_script_tizenwebuifw", head); - mapModel3.put("test_html_body_tizenwebuifw_multi", ""); - engine.getModelProvider().addModel("testTizenMultiModel", mapModel3); - - File destinationEmptyFile = new File("./test/src/org/tizen/common/verrari/engine/freemarker/test.html"); - File destinationTizenSingleFile = new File("./test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle.html"); - File destinationTizenMultiFile = new File("./test/src/org/tizen/common/verrari/engine/freemarker/testTizenMulti.html"); - - TargetGroup group = new TargetGroup(); - group.addTargetUnit(new TargetUnit("testHtmlTemplate", "testEmptyModel", new OutputStreamWriter(new FileOutputStream(destinationEmptyFile)), "UTF-8")); - group.addTargetUnit(new TargetUnit("testHtmlTemplate", "testTizenSingleModel", new OutputStreamWriter(new FileOutputStream(destinationTizenSingleFile)), "UTF-8")); - group.addTargetUnit(new TargetUnit("testHtmlTemplate", "testTizenMultiModel", new OutputStreamWriter(new FileOutputStream(destinationTizenMultiFile)), "UTF-8")); - - engine.genearteGroup(group); - //TargetUnit unit = new TargetUnit("testHtmlTemplate", "testHtmlModel", new OutputStreamWriter(System.out), "UTF-8"); + final TemplateManager templateProvider = new TemplateManager(); + engine.setTemplateProvider( templateProvider ); + + Preference.register( null, "description_date", "2012"); + Preference.register( null, "description_author", "changhyun1.lee@samsung.com"); - ITemplate regenTemplate = new FileTemplate(new File("./test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle.html")); - engine.getTemplateProvider().addTemplate("regenHtmlTemplate", regenTemplate); - MapModel finalMapModel = new MapModel(new HashMap()); - finalMapModel.put("TizenWebUIFW_PATH", ""); - engine.getModelProvider().addModel("testFinalMapModel", finalMapModel); - File finalTizenSingleFile = new File("./test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle2.html"); - TargetUnit unit = new TargetUnit("regenHtmlTemplate", "testFinalMapModel", new OutputStreamWriter(new FileOutputStream(finalTizenSingleFile)), "UTF-8"); - engine.generate(unit); + templateProvider.addTemplate( "description.ftl", new ClasspathResourceTemplate( "org/tizen/common/verrari/engine/freemarker/description.ftl", getClass() ) ); + templateProvider.addTemplate( "test_html_body.ftl", new ClasspathResourceTemplate( "org/tizen/common/verrari/engine/freemarker/test_html_body.ftl", getClass() ) ); + templateProvider.addTemplate( "testHtmlTemplate", new ClasspathResourceTemplate( "org/tizen/common/verrari/engine/freemarker/test_html.ftl", getClass() ) ); -// description_date -// description_author -// head_script_tizen-web-ui-fw -// TizenWebUIFW_Enable -// test_html_body_tizenwebuifw_single -// test_html_body_tizenwebuifw_multi + { + final ModelManager modelManager = new ModelManager(); + modelManager.addModel( "index_html_title", "Tizen Empty" ); + final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + engine.generate( "testHtmlTemplate", modelManager, byteOut ); + final String result = byteOut.toString(); + assertTrue( 0 < result.length() ); + assertTrue( result.contains( "changhyun1.lee@samsung.com" ) ); + assertTrue( result.contains( "Tizen Empty" ) ); + assertFalse( result.contains( "" ) ); + } + + { + final ModelManager modelManager = new ModelManager(); + modelManager.addModel("index_html_title", "Tizen Web UI FW - Single"); + modelManager.addModel("TizenWebUIFW_Enable", ""); + modelManager.addModel("head_script_tizenwebuifw", head); + modelManager.addModel("test_html_body_tizenwebuifw_single", ""); + + final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + engine.generate( "testHtmlTemplate", modelManager, byteOut ); + templateProvider.addTemplate( "regenHtmlTemplate", new InMemoryTemplate( byteOut.toByteArray(), "utf-8", BufferFactory.getInstance() ) ); + final String result = byteOut.toString(); + assertTrue( 0 < result.length() ); + assertTrue( result.contains( "changhyun1.lee@samsung.com" ) ); + assertTrue( result.contains( "Tizen Web UI FW - Single" ) ); + assertTrue( result.contains( "TizenWebUIFW_Default" ) ); + assertTrue( result.contains( "TizenWebUIFW_PATH" ) ); + assertTrue( result.contains( "This is a single page boilerplate template" ) ); + assertTrue( result.contains( "" ) ); + } + + { + final ModelManager modelManager = new ModelManager(); + + modelManager.addModel("index_html_title", "Tizen Web UI FW - Multi"); + modelManager.addModel("TizenWebUIFW_Enable", ""); + modelManager.addModel("head_script_tizenwebuifw", head); + modelManager.addModel("test_html_body_tizenwebuifw_multi", ""); + + final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + engine.generate( "testHtmlTemplate", modelManager, byteOut ); + final String result = byteOut.toString(); + assertTrue( 0 < result.length() ); + assertTrue( result.contains( "changhyun1.lee@samsung.com" ) ); + assertTrue( result.contains( "Tizen Web UI FW - Multi" ) ); + assertTrue( result.contains( "TizenWebUIFW_Default" ) ); + assertTrue( result.contains( "This is a multi-page boilerplate template" ) ); + assertTrue( result.contains( "" ) ); + } + + { + final ModelManager modelManager = new ModelManager(); + + modelManager.addModel("TizenWebUIFW_PATH", ""); + + final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + engine.generate( "regenHtmlTemplate", modelManager, byteOut ); + final String result = byteOut.toString(); + assertTrue( 0 < result.length() ); + assertTrue( result.contains( "changhyun1.lee@samsung.com" ) ); + assertTrue( result.contains( "Tizen Web UI FW - Single" ) ); + assertFalse( result.contains( "TizenWebUIFW_PATH" ) ); + assertTrue( result.contains( "This is a single page boilerplate template" ) ); + assertTrue( result.contains( "" ) ); + + } } } diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/test.html b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/test.html deleted file mode 100755 index d99afa4..0000000 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/test.html +++ /dev/null @@ -1,47 +0,0 @@ - -Error reading included file description.ftl -The problematic instruction: ----------- -==> include "description.ftl" [on line 1, column 1 in .\test\src\org\tizen\common\verrari\engine\freemarker\test_html.ftl] ----------- - -Java backtrace for programmers: ----------- -freemarker.template.TemplateException: Error reading included file description.ftl - at freemarker.core.Include.accept(Include.java:167) - at freemarker.core.Environment.visit(Environment.java:221) - at freemarker.core.MixedContent.accept(MixedContent.java:92) - at freemarker.core.Environment.visit(Environment.java:221) - at freemarker.core.Environment.process(Environment.java:199) - at freemarker.template.Template.process(Template.java:237) - at org.tizen.common.verrari.engine.freemarker.FreemarkerTemplateEngine.generate(FreemarkerTemplateEngine.java:76) - at org.tizen.common.verrari.engine.AbstractTemplateEngine.genearteGroup(AbstractTemplateEngine.java:103) - at org.tizen.common.verrari.engine.freemarker.FreemarkerTemplateEngineTest.test_generate(FreemarkerTemplateEngineTest.java:108) - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) - at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) - at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) - at java.lang.reflect.Method.invoke(Unknown Source) - at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) - at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) - at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) - at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) - at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) - at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) - at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) - at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) - at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) - at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) - at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) - at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) - at org.junit.runners.ParentRunner.run(ParentRunner.java:300) - at org.junit.runner.JUnitCore.run(JUnitCore.java:157) - at org.junit.runner.JUnitCore.run(JUnitCore.java:136) - at org.infinitest.testrunner.JUnit4Runner.runTest(JUnit4Runner.java:66) - at org.infinitest.testrunner.TestRunnerProcess.runTest(TestRunnerProcess.java:64) - at org.infinitest.testrunner.TestRunnerProcess.writeTestResultToOutputStream(TestRunnerProcess.java:106) - at org.infinitest.testrunner.TestRunnerProcess.main(TestRunnerProcess.java:83) -Caused by: java.io.FileNotFoundException: Template description.ftl not found. - at freemarker.template.Configuration.getTemplate(Configuration.java:495) - at freemarker.core.Environment.getTemplateForInclusion(Environment.java:1490) - at freemarker.core.Include.accept(Include.java:157) - ... 31 more diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenMulti.html b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenMulti.html deleted file mode 100755 index e69de29..0000000 diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle.html b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle.html deleted file mode 100755 index e69de29..0000000 diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle2.html b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle2.html deleted file mode 100644 index f3dd7fe..0000000 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/freemarker/testTizenSingle2.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - Tizen Web UI FW - Single - - - - - - - - - - - -
-
-

Single-Page Application

-
- -
-

This is a single page boilerplate template that you can copy to build your first Tizen Web UI Framework page.

-
- -
-

Footer content

-
-
- - diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngineTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngineTest.java old mode 100644 new mode 100755 index b395047..c5e3fe9 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngineTest.java +++ b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/JsoupTemplateEngineTest.java @@ -1,17 +1,16 @@ package org.tizen.common.verrari.engine.jsoup; -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.util.HashMap; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; import org.jsoup.nodes.Attribute; import org.jsoup.nodes.Attributes; import org.junit.Test; -import org.tizen.common.verrari.model.MapModel; -import org.tizen.common.verrari.target.TargetUnit; -import org.tizen.common.verrari.template.FileTemplate; -import org.tizen.common.verrari.template.ITemplate; +import org.tizen.common.verrari.model.ModelManager; +import org.tizen.common.verrari.template.ClasspathResourceTemplate; +import org.tizen.common.verrari.template.TemplateManager; public class JsoupTemplateEngineTest { @@ -25,29 +24,30 @@ public class JsoupTemplateEngineTest { @Test public void test_generate() throws Exception { JsoupTemplateEngine engine = new JsoupTemplateEngine(); - ITemplate template = new FileTemplate(new File("./test/src/org/tizen/common/verrari/engine/jsoup/TizenSingle.html")); - engine.getTemplateProvider().addTemplate("jsoupTemplate", template); + final TemplateManager templateProvider = new TemplateManager(); + templateProvider.addTemplate("jsoupTemplate", new ClasspathResourceTemplate( "org/tizen/common/verrari/engine/jsoup/TizenSingle.html", getClass() ) ); + engine.setTemplateProvider( templateProvider ); // selector - http://jsoup.org/apidocs/org/jsoup/select/Selector.html - MapModel mapModel = new MapModel(new HashMap()); + ModelManager mapModel = new ModelManager(); Attribute jquery = new Attribute("src", "/usr/share/tizen-web-ui-fw/latest/js/jquery.js"); - mapModel.put("script[src$=tizen-web-ui-fw/latest/js/jquery.js]", jquery); + mapModel.addModel("script[src$=tizen-web-ui-fw/latest/js/jquery.js]", jquery); Attribute tizenwebuifwlibs = new Attribute("src", "/usr/share/tizen-web-ui-fw/latest/js/tizen-web-ui-fw-libs.js"); - mapModel.put("script[src$=tizen-web-ui-fw/latest/js/tizen-web-ui-fw-libs.js]", tizenwebuifwlibs); + mapModel.addModel("script[src$=tizen-web-ui-fw/latest/js/tizen-web-ui-fw-libs.js]", tizenwebuifwlibs); Attributes tizenwebuifw = new Attributes(); tizenwebuifw.put("src", "/usr/share/tizen-web-ui-fw/latest/js/tizen-web-ui-fw.js"); tizenwebuifw.put("data-framework-theme", "tizen-white"); tizenwebuifw.put("data-framework-viewport-scale", "true"); - mapModel.put("script[src$=tizen-web-ui-fw/latest/js/tizen-web-ui-fw.js]", tizenwebuifw); - - engine.getModelProvider().addModel("jsoupModel", mapModel); - - File genTizenSingleFile = new File("./test/src/org/tizen/common/verrari/engine/jsoup/genTizenSingle.html"); - TargetUnit unit = new TargetUnit("jsoupTemplate", "jsoupModel", new OutputStreamWriter(new FileOutputStream(genTizenSingleFile.getPath())), "UTF-8"); - //TargetUnit unit = new TargetUnit("jsonTemplate", "jsonModel", new OutputStreamWriter(System.out), "UTF-8"); - engine.generate(unit); + mapModel.addModel("script[src$=tizen-web-ui-fw/latest/js/tizen-web-ui-fw.js]", tizenwebuifw); + + final ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + engine.generate( "jsoupTemplate", mapModel, byteOut ); + + final String result = byteOut.toString(); + assertFalse( result.contains( "tizen-gray" ) ); + assertTrue( result.contains( "tizen-white" ) ); } diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/genTizenSingle.html b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/engine/jsoup/genTizenSingle.html old mode 100644 new mode 100755 diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetGruopTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetGruopTest.java deleted file mode 100644 index 73472c5..0000000 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetGruopTest.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ -package org.tizen.common.verrari.target; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * TargetGruopTest. - * - * Test case for {@link TargetGroup} - * - * @author Changhyun Lee{@literal } (S-Core) - * - * @see TargetGroup - * - */ -public class TargetGruopTest { - - protected TargetGroup group; - - @Before - public void setUp() { - group = new TargetGroup(); - } - - @After - public void tearDown() throws IOException { - } - - /** - * Test {@link TargetGroup#TargetGroup()} - * - * @throws Exception in case of failure in test - * - * @see TargetGroup#TargetGroup() - */ - @Test - public void test_TargetGroup() throws Exception { - assertNotNull(group.getTargetUnits()); - } - - /** - * Test {@link TargetGroup#getTargetUnits()} - * - * @throws Exception in case of failure in test - * - * @see TargetGroup#getTargetUnits() - */ - @Test - public void test_getTargetUnits() throws Exception { - assertNotNull(group.getTargetUnits()); - } - - /** - * Test {@link TargetGroup#addTargetUnit(TargetUnit)} - * - * @throws Exception in case of failure in test - * - * @see TargetGroup#addTargetUnit(TargetUnit) - */ - @Test - public void test_addTargetUnit() throws Exception { - assertFalse(group.addTargetUnit(null)); - - Writer writer = null; - try { - writer = new OutputStreamWriter(System.out); - TargetUnit unit = new TargetUnit("templatekey", "modelkey", writer, null); - assertTrue(group.addTargetUnit(unit)); - } catch (Exception e) { - throw e; - } finally { - if (writer != null) { - writer.close(); - } - } - } - - /** - * Test {@link TargetGroup#removeTargetunit(TargetUnit)} - * - * @throws Exception in case of failure in test - * - * @see TargetGroup#removeTargetunit(TargetUnit) - */ - @Test - public void test_removeTargetunit() throws Exception { - assertFalse(group.removeTargetunit(null)); - - Writer writer = null; - try { - writer = new OutputStreamWriter(System.out); - TargetUnit unit = new TargetUnit("templatekey", "modelkey", writer, null); - assertTrue(group.addTargetUnit(unit)); - assertTrue(group.removeTargetunit(unit)); - } catch (Exception e) { - throw e; - } finally { - if (writer != null) { - writer.close(); - } - } - } - - /** - * Test {@link TargetGroup#isEmpty()} - * - * @throws Exception in case of failure in test - * - * @see TargetGroup#isEmpty() - */ - @Test - public void test_isEmpty() throws Exception { - assertTrue(group.isEmpty()); - - Writer writer = null; - try { - writer = new OutputStreamWriter(System.out); - TargetUnit unit = new TargetUnit("templatekey", "modelkey", writer, null); - assertTrue(group.addTargetUnit(unit)); - assertFalse(group.isEmpty()); - } catch (Exception e) { - throw e; - } finally { - if (writer != null) { - writer.close(); - } - } - } -} diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetUnitTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetUnitTest.java deleted file mode 100644 index 75f2d17..0000000 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/target/TargetUnitTest.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Verrari - TemplateEngine - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Changhyun Lee - * Hyeongseok Heo - * Kangho Kim - * BonYong Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ -package org.tizen.common.verrari.target; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * TargetUnitTest. - * - * Test case for {@link TargetUnit} - * - * @author Changhyun Lee{@literal } (S-Core) - * - * @see TargetUnit - * - */ -public class TargetUnitTest { - - protected TargetUnit unit; - protected Writer writer; - - @Before - public void setUp() { - writer = new OutputStreamWriter(System.out); - unit = new TargetUnit("templateKey", "modelKey", writer, "UTF-8"); - } - - @After - public void tearDown() throws IOException { - if (writer != null) { - writer.close(); - } - } - - /** - * Test {@link TargetUnit#TargetUnit(String, String, Writer, String)} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#TargetUnit(String, String, Writer, String) - */ - @Test - public void test_TargetUnit() throws Exception { - @SuppressWarnings("unused") - TargetUnit tempUnit; - - try { - tempUnit = new TargetUnit("templateKey", "modelKey", writer, null); - } catch (Exception e) { - throw e; - } - - try { - tempUnit = new TargetUnit(null, null, null, null); - fail( "TargetUnit must throw exception" ); - } catch (Exception e) { - } - - try { - tempUnit = new TargetUnit("templateKey", "modelKey", null, null); - fail( "TargetUnit must throw exception" ); - } catch (Exception e) { - } - - try { - tempUnit = new TargetUnit("templateKey", null, writer, null); - fail( "TargetUnit must throw exception" ); - } catch (Exception e) { - } - - try { - tempUnit = new TargetUnit(null, "modelKey", writer, null); - fail( "TargetUnit must throw exception" ); - } catch (Exception e) { - } - } - - /** - * Test {@link TargetUnit#setTemplateKey(String)} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#setTemplateKey(String) - */ - @Test - public void test_setTemplateKey() throws Exception { - unit.setTemplateKey(null); - assertNotNull(unit.getTemplateKey()); - - unit.setTemplateKey("template"); - assertEquals(unit.getTemplateKey(), "template"); - } - - /** - * Test {@link TargetUnit#getTemplateKey()} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#getTemplateKey() - */ - @Test - public void test_getTemplateKey() throws Exception { - assertEquals(unit.getTemplateKey(), "templateKey"); - } - - /** - * Test {@link TargetUnit#setModelKey(String)} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#setModelKey(String) - */ - @Test - public void test_setModelKey() throws Exception { - unit.setModelKey(null); - assertNotNull(unit.getModelKey()); - - unit.setModelKey("model"); - assertEquals(unit.getModelKey(), "model"); - } - - /** - * Test {@link TargetUnit#getModelKey()} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#getModelKey() - */ - @Test - public void test_getModelKey() throws Exception { - assertEquals(unit.getModelKey(), "modelKey"); - } - - /** - * Test {@link TargetUnit#setWriter(Writer)} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#setWriter(Writer) - */ - @Test - public void test_setWriter() throws Exception { - Writer tempWriter = null; - unit.setWriter(null); - assertNotNull(unit.getWriter()); - - try { - tempWriter = new OutputStreamWriter(System.out); - unit.setWriter(tempWriter); - assertEquals(unit.getWriter(), tempWriter); - } catch (Exception e) { - throw e; - } - } - - /** - * Test {@link TargetUnit#getWriter()} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#getWriter() - */ - @Test - public void test_getWriter() throws Exception { - assertEquals(writer, unit.getWriter()); - } - - /** - * Test {@link TargetUnit#setEncoding(String)} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#setEncoding(String) - */ - @Test - public void test_setEncoding() throws Exception { - unit.setEncoding(null); - assertNotNull(unit.getEncoding()); - - unit.setEncoding("UTF-8"); - assertEquals(unit.getEncoding(), "UTF-8"); - } - - /** - * Test {@link TargetUnit#getEncoding()} - * - * @throws Exception in case of failure in test - * - * @see TargetUnit#getEncoding() - */ - @Test - public void test_getEncoding() throws Exception { - assertEquals(unit.getEncoding(), "UTF-8"); - } -} diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/FileTemplateTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/FileTemplateTest.java old mode 100644 new mode 100755 index cfa9644..4c3b52f --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/FileTemplateTest.java +++ b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/FileTemplateTest.java @@ -64,18 +64,6 @@ public class FileTemplateTest { } /** - * Test {@link FileTemplate#getContainer()} - * - * @throws Exception in case of failure in test - * - * @see FileTemplate#getContainer() - */ - @Test - public void test_getContainer() throws Exception { - assertEquals(file, fileTemplate.getContainer()); - } - - /** * Test {@link FileTemplate#getEncoding()} * * @throws Exception in case of failure in test diff --git a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/StaticTemplateProviderTest.java b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/TemplateManagerTest.java old mode 100644 new mode 100755 similarity index 66% rename from org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/StaticTemplateProviderTest.java rename to org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/TemplateManagerTest.java index 7f4268f..739ec44 --- a/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/StaticTemplateProviderTest.java +++ b/org.tizen.common.verrari/test/src/org/tizen/common/verrari/template/TemplateManagerTest.java @@ -27,14 +27,13 @@ */ package org.tizen.common.verrari.template; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; import java.net.URI; -import java.util.Map; +import java.util.Collection; import org.junit.After; import org.junit.Before; @@ -43,20 +42,20 @@ import org.junit.Test; /** * StaticTemplateProviderTest. * - * Test case for {@link StaticTemplateProvider} + * Test case for {@link TemplateManager} * * @author Changhyun Lee{@literal } (S-Core) * - * @see StaticTemplateProvider + * @see TemplateManager * */ -public class StaticTemplateProviderTest { +public class TemplateManagerTest { - protected StaticTemplateProvider stp; + protected TemplateManager stp; @Before public void setUp() { - stp = new StaticTemplateProvider(); + stp = new TemplateManager(); } @After @@ -64,11 +63,11 @@ public class StaticTemplateProviderTest { } /** - * Test {@link StaticTemplateProvider#addTemplate(String, ITemplate)} + * Test {@link TemplateManager#addTemplate(String, ITemplate)} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#addTemplate(String, ITemplate) + * @see TemplateManager#addTemplate(String, ITemplate) */ @Test public void test_addTemplate() throws Exception { @@ -80,62 +79,62 @@ public class StaticTemplateProviderTest { } /** - * Test {@link StaticTemplateProvider#addTemplate(String, URI)} + * Test {@link TemplateManager#addTemplate(String, URI)} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#addTemplate(String, URI) + * @see TemplateManager#addTemplate(String, URI) */ @Test public void test_addTemplate2() throws Exception { assertTrue(stp.isEmpty()); File file = new File("./test/src/org/tizen/common/verrari/template/test_html.ftl"); URI uri = file.toURI(); - stp.addTemplate("testhtml", uri); + stp.addTemplate("testhtml", new URLTemplate( uri.toURL() )); assertFalse(stp.isEmpty()); assertNotNull(stp.getTemplate("testhtml")); } /** - * Test {@link StaticTemplateProvider#addTemplate(String, File)} + * Test {@link TemplateManager#addTemplate(String, File)} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#addTemplate(String, File) + * @see TemplateManager#addTemplate(String, File) */ @Test public void test_addTemplate3() throws Exception { assertTrue(stp.isEmpty()); - stp.addTemplate("testhtml", new File("./test/src/org/tizen/common/verrari/template/test_html.ftl")); + stp.addTemplate("testhtml", new FileTemplate( new File("./test/src/org/tizen/common/verrari/template/test_html.ftl") ) ); assertFalse(stp.isEmpty()); assertNotNull(stp.getTemplate("testhtml")); } /** - * Test {@link StaticTemplateProvider#getTemplate()} + * Test {@link TemplateManager#getTemplate()} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#getTemplate() + * @see TemplateManager#getTemplate() */ @Test public void test_getTemplate() throws Exception { assertTrue(stp.isEmpty()); - stp.addTemplate("testhtml", new File("./test/src/org/tizen/common/verrari/template/test_html.ftl")); + stp.addTemplate("testhtml", new FileTemplate( new File("./test/src/org/tizen/common/verrari/template/test_html.ftl") )); assertNotNull(stp.getTemplate("testhtml")); } /** - * Test {@link StaticTemplateProvider#removeTemplate(String)} + * Test {@link TemplateManager#removeTemplate(String)} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#removeTemplate(String) + * @see TemplateManager#removeTemplate(String) */ @Test public void test_removeTemplate() throws Exception { assertTrue(stp.isEmpty()); - stp.addTemplate("testhtml", new File("./test/src/org/tizen/common/verrari/template/test_html.ftl")); + stp.addTemplate("testhtml", new FileTemplate( new File("./test/src/org/tizen/common/verrari/template/test_html.ftl") ) ); assertFalse(stp.isEmpty()); stp.removeTemplate(null); assertFalse(stp.isEmpty()); @@ -144,34 +143,34 @@ public class StaticTemplateProviderTest { } /** - * Test {@link StaticTemplateProvider#getTemplates()} + * Test {@link TemplateManager#getTemplates()} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#getTemplates() + * @see TemplateManager#getTemplates() */ @Test public void test_getTemplates() throws Exception { assertTrue(stp.isEmpty()); - stp.addTemplate("testhtml", new File("./test/src/org/tizen/common/verrari/template/test_html.ftl")); + stp.addTemplate("testhtml", new FileTemplate( new File("./test/src/org/tizen/common/verrari/template/test_html.ftl") ) ); assertFalse(stp.isEmpty()); - Map templates = stp.getTemplates(); + Collection templates = stp.keys(); assertFalse(templates.isEmpty()); - assertEquals(stp.getTemplate("testhtml"), templates.get("testhtml")); + assertNotNull(stp.getTemplate("testhtml")); } /** - * Test {@link StaticTemplateProvider#isEmpty()} + * Test {@link TemplateManager#isEmpty()} * * @throws Exception in case of failure in test * - * @see StaticTemplateProvider#isEmpty() + * @see TemplateManager#isEmpty() */ @Test public void test_isEmpty() throws Exception { assertTrue(stp.isEmpty()); - stp.addTemplate("testhtml", new File("./test/src/org/tizen/common/verrari/template/test_html.ftl")); + stp.addTemplate("testhtml", new FileTemplate( new File("./test/src/org/tizen/common/verrari/template/test_html.ftl") ) ); assertFalse(stp.isEmpty()); stp.removeTemplate("testhtml"); assertTrue(stp.isEmpty()); diff --git a/org.tizen.common/META-INF/MANIFEST.MF b/org.tizen.common/META-INF/MANIFEST.MF index c88a4fe..3f6ce39 100755 --- a/org.tizen.common/META-INF/MANIFEST.MF +++ b/org.tizen.common/META-INF/MANIFEST.MF @@ -10,6 +10,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources, org.eclipse.core.filesystem Export-Package: + freemarker.cache, + freemarker.core, freemarker.ext.dom, freemarker.template, org.apache.commons.lang3, @@ -163,6 +165,8 @@ Export-Package: org.powermock.tests.utils.impl, org.slf4j, org.tizen.common, + org.tizen.common.config, + org.tizen.common.config.loader, org.tizen.common.core.application, org.tizen.common.core.command, org.tizen.common.core.command.file, @@ -170,6 +174,7 @@ Export-Package: org.tizen.common.core.command.prompter, org.tizen.common.core.command.sdb, org.tizen.common.core.command.zip, + org.tizen.common.daemon, org.tizen.common.file, org.tizen.common.file.filter, org.tizen.common.ui, @@ -180,6 +185,7 @@ Export-Package: org.tizen.common.ui.widget, org.tizen.common.util, org.tizen.common.util.cache, + org.tizen.common.util.io, org.tizen.common.util.log, org.tizen.common.util.url.classpath, org.tizen.common.util.url.cp, diff --git a/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java b/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java old mode 100644 new mode 100755 index d1ea1f6..53c9f1b --- a/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java +++ b/org.tizen.common/src/org/tizen/common/core/command/file/DirectoryCopyHandlingCommand.java @@ -131,7 +131,6 @@ public class DirectoryCopyHandlingCommand extends FileHandlingCommand { resultOption.run(); } else { - System.out.println(targetFile); targetFile.createNewFile(); handler.copyFile(sourceFile.getPath(), targetFile.getPath()); } diff --git a/org.tizen.common/src/org/tizen/common/daemon/AbstractServer.java b/org.tizen.common/src/org/tizen/common/daemon/AbstractServer.java new file mode 100755 index 0000000..d0f6567 --- /dev/null +++ b/org.tizen.common/src/org/tizen/common/daemon/AbstractServer.java @@ -0,0 +1,193 @@ +package org.tizen.common.daemon; + +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +abstract public class +AbstractServer +implements Server, Runnable +{ + protected final Logger logger = LoggerFactory.getLogger( getClass() ); + + protected Thread thread = null; + + protected Lock lock = new ReentrantLock(); + + protected ServerState state = ServerState.Terminated; + + protected final String name; + + public AbstractServer() + { + this( null ); + } + + public AbstractServer( final String name ) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public + void + setStatus( + final ServerState state + ) + { + lock.lock(); + try + { + this.state = state; + } + finally + { + lock.unlock(); + synchronized ( this ) + { + notifyAll(); + } + } + } + + public + boolean + isState( + final ServerState... states + ) + { + lock.lock(); + try + { + for ( final ServerState state : states ) + { + if ( this.state.equals( state ) ) + { + return true; + } + } + return false; + } + finally + { + lock.unlock(); + } + } + + public + void + waitState( ServerState... states ) + { + while ( !isState( states ) ) { + try + { + synchronized ( this ) + { + wait(); + } + } catch ( final InterruptedException e ) + { + } + } + } + + + + @Override + public void run() + { + if ( isState( ServerState.Halting ) ) { + setStatus( ServerState.Terminated ); + return ; + } + try + { + initialize(); + + lock.lock(); + try + { + if ( isState( ServerState.Halting ) ) { + return ; + } + setStatus( ServerState.Running ); + } + finally + { + lock.unlock(); + } + while ( !isState( ServerState.Halting ) ) { + process(); + } + } + catch ( Exception e ) + { + logger.error( "Error occurred:", e ); + } + finally + { + terminate(); + setStatus( ServerState.Terminated ); + } + + } + + @Override + public void boot() throws Exception + { + lock.lock(); + try + { + if ( !isState( ServerState.Terminated ) ) + { + throw new IllegalStateException(); + } + + setStatus( ServerState.Initializing ); + } + finally + { + lock.unlock(); + } + final String name = getName(); + if ( null == name ) + { + thread = new Thread( this ); + } + else + { + thread = new Thread( this, name ); + } + thread.start(); + } + + @Override + public void down() throws Exception + { + lock.lock(); + try + { + if ( isState( ServerState.Terminated, ServerState.Halting ) ) { + throw new IllegalStateException(); + } + setStatus( ServerState.Halting ); + } + finally + { + lock.unlock(); + } + + } + + abstract protected void initialize() throws Exception; + + abstract protected void process() throws Exception; + + abstract protected void terminate(); +} diff --git a/org.tizen.common/src/org/tizen/common/daemon/Server.java b/org.tizen.common/src/org/tizen/common/daemon/Server.java new file mode 100755 index 0000000..8574db6 --- /dev/null +++ b/org.tizen.common/src/org/tizen/common/daemon/Server.java @@ -0,0 +1,9 @@ +package org.tizen.common.daemon; + +public interface Server +{ + void boot() throws Exception; + + void down() throws Exception; + +} diff --git a/org.tizen.common/src/org/tizen/common/daemon/ServerState.java b/org.tizen.common/src/org/tizen/common/daemon/ServerState.java new file mode 100755 index 0000000..e4acca0 --- /dev/null +++ b/org.tizen.common/src/org/tizen/common/daemon/ServerState.java @@ -0,0 +1,13 @@ +package org.tizen.common.daemon; + +public enum ServerState +{ + Terminated, + + Initializing, + + Running, + + Halting + +} diff --git a/org.tizen.common/src/org/tizen/common/util/io/Buffer.java b/org.tizen.common/src/org/tizen/common/util/io/Buffer.java old mode 100644 new mode 100755 index 888d346..ecbd4ba --- a/org.tizen.common/src/org/tizen/common/util/io/Buffer.java +++ b/org.tizen.common/src/org/tizen/common/util/io/Buffer.java @@ -358,8 +358,9 @@ implements Closeable { final ByteBuffer buffer = getBufferForWrite(); final int remaingSize = buffer.remaining(); - buffer.put( bytes, i, remaingSize ); - i += remaingSize; + final int writeSize = Math.min( remaingSize, bytes.length - i ); + buffer.put( bytes, i, writeSize ); + i += writeSize; } } diff --git a/org.tizen.common/src/org/tizen/common/util/io/BufferPool.java b/org.tizen.common/src/org/tizen/common/util/io/BufferPool.java old mode 100644 new mode 100755 diff --git a/org.tizen.common/test/src/log4j.xml b/org.tizen.common/test/src/log4j.xml index e5d1893..4c4b6ab 100755 --- a/org.tizen.common/test/src/log4j.xml +++ b/org.tizen.common/test/src/log4j.xml @@ -9,7 +9,7 @@ - + \ No newline at end of file diff --git a/org.tizen.common/test/src/org/tizen/common/config/ExpressionParserTest.java b/org.tizen.common/test/src/org/tizen/common/config/ExpressionParserTest.java index 396f83c..3b5c394 100755 --- a/org.tizen.common/test/src/org/tizen/common/config/ExpressionParserTest.java +++ b/org.tizen.common/test/src/org/tizen/common/config/ExpressionParserTest.java @@ -48,7 +48,7 @@ ExpressionParserTest * @throws Exception in case of failure in preparation */ @Before - protected + public void setUp() throws Exception { @@ -73,7 +73,7 @@ ExpressionParserTest } @After - protected + public void tearDown() throws Exception { diff --git a/org.tizen.common/test/src/org/tizen/common/daemon/AbstractServerTest.java b/org.tizen.common/test/src/org/tizen/common/daemon/AbstractServerTest.java new file mode 100755 index 0000000..06bbb40 --- /dev/null +++ b/org.tizen.common/test/src/org/tizen/common/daemon/AbstractServerTest.java @@ -0,0 +1,73 @@ +package org.tizen.common.daemon; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.Test; +import org.tizen.common.util.ThreadUtil; + +public class AbstractServerTest +{ + + @Test + public void test_boot() throws Exception + { + final AtomicInteger status = new AtomicInteger(); + + AbstractServer server = new AbstractServer() + { + + @Override + protected void terminate() + { + ThreadUtil.trySleep( 200 ); + status.incrementAndGet(); + } + + @Override + protected void process() throws Exception + { + ThreadUtil.trySleep( 200 ); + } + + @Override + protected void initialize() throws Exception + { + ThreadUtil.trySleep( 200 ); + status.incrementAndGet(); + } + + @Override + public String getName() + { + return null; + } + }; + + server.boot(); + try + { + server.boot(); + fail(); + } catch ( IllegalStateException e ) + { + } + server.waitState( ServerState.Running ); + assertEquals( 1, status.intValue() ); + + server.down(); + try + { + server.down(); + fail(); + } catch ( IllegalStateException e ) + { + } + server.waitState( ServerState.Terminated ); + assertEquals( 2, status.intValue() ); + + } + +} -- 2.7.4