com.ibm.sbt.playground.assets.AssetNode Maven / Gradle / Ivy
/*
* Copyright IBM Corp. 2012
*
* 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.
*/
package com.ibm.sbt.playground.assets;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.Properties;
import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.io.ReaderInputStream;
import com.ibm.commons.util.io.StreamUtil;
import com.ibm.sbt.playground.vfs.VFS;
import com.ibm.sbt.playground.vfs.VFSFile;
/**
* Definition of a code snippet.
*/
public abstract class AssetNode extends Node {
public static final String GLOBAL_PROPERTIES = "_global.properties";
public AssetNode(CategoryNode parent, String name) {
super(parent,name);
}
public AssetNode(CategoryNode parent, String name, String category, String unid, String jspUrl) {
super(parent,name,category,unid,jspUrl);
}
public VFSFile getFile(VFS vfs, String ext) throws IOException {
return vfs.getFile(getPath()+"."+ext);
}
/**
* Load the assert from the VFSFile
* @param root
* @return
* @throws IOException
*/
public Asset load(VFSFile root) throws IOException {
Asset s = createAsset(root);
if(s!=null) {
s.setUnid(getUnid());
// Read the properties, starting from the most global ones
Properties p = new Properties();
readProperties(root.getVFS(), this, p);
s.init(p);
}
return s;
}
protected void readProperties(VFS vfs, Node node, Properties p) throws IOException {
// Read the parent global first
CategoryNode parent =node.getParent();
if(parent!=null) {
readProperties(vfs, parent, p);
}
// Then the current file
if(node.isCategory()) {
String props = ((CategoryNode)node).readGlobalProperties(vfs);
addProperties(p, props);
} else if(node.isAsset()) {
String props = loadResource(parent.getFile(vfs), "properties");
addProperties(p, props);
}
}
protected void addProperties(Properties p, String value) throws IOException {
if(StringUtil.isNotEmpty(value)) {
ReaderInputStream is = new ReaderInputStream(new StringReader(value));
try {
p.load(is);
} finally {
StreamUtil.close(is);
}
}
}
public abstract Asset createAsset(VFSFile root) throws IOException;
protected VFSFile getParentFile(VFSFile root) throws IOException {
if(getParent()!=null) {
String parentPath = getParent().getPath();
if(StringUtil.isNotEmpty(parentPath)) {
return root.getFile(parentPath);
}
}
return root;
}
protected String loadResource(VFSFile parent, String ext) throws IOException {
String s = getName() + "." + ext;
return loadFile(parent, s);
}
protected String loadFile(VFSFile parent, String fileName) throws IOException {
VFSFile f = parent.getFile(fileName);
return loadFile(f);
}
protected String loadFile(VFSFile file) throws IOException {
if(file!=null) {
InputStream is = file.getInputStream();
if(is!=null) {
try {
return StreamUtil.readString(is);
} finally {
StreamUtil.close(is);
}
}
}
return null;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy