package org.gvsig.scripting.impl; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.Charsets; import org.apache.commons.io.FileUtils; import org.apache.tika.Tika; import org.gvsig.scripting.ScriptingExternalFile; import org.gvsig.scripting.ScriptingFolder; import org.gvsig.scripting.ScriptingManager; public class DefaultScriptingExternalFile extends AbstractUnit implements ScriptingExternalFile { private File externFile = null; private String mimeType = null; private static Tika tika = null; public DefaultScriptingExternalFile(ScriptingFolder parent, ScriptingManager manager, String id) { super(parent, ScriptingManager.UNIT_EXTERNALFILE, manager, id); this.externFile = new File(parent.getFile(),id); } @Override public void load(ScriptingFolder folder, String id) { } @Override public boolean rename(String newId) { try { File newf = new File(this.externFile.getParentFile(),newId); FileUtils.moveFile(this.externFile, newf); return true; } catch (IOException ex) { throw new RuntimeException("Can't rename '"+this.id+"' to '"+newId+"'.", ex); } } @Override public void create(ScriptingFolder folder, String id) { File file = this.externFile; try { file.createNewFile(); } catch (IOException e) { LOGGER.warn("Can't create inf file in '" + file.getAbsolutePath() + "'.", e); } } @Override public void create(ScriptingFolder folder, String id, String language) { this.create(folder, id); } @Override public boolean remove() { return FileUtils.deleteQuietly(externFile); } @Override public boolean move(ScriptingFolder target) { File target_f = target.getFile(); File source_f = this.getExternalFile(); try { FileUtils.copyFile(source_f, target_f); return true; } catch (IOException ex) { return false; } } @Override public String[] getIconNames() { return new String[]{ "scripting-icon-externalfile", "scripting-icon-externalfile-open" }; } @Override public File getExternalFile() { return this.externFile; } @Override public File getFile() { if (this.getId() == null) { return null; } if (this.getParent() == null) { return null; } if (this.getParent().getFile() == null) { return null; } return this.externFile; } @Override public List getFiles() { List l=new ArrayList<>(); l.add(this.externFile); return l; } @Override public String getMimeType() { if( this.mimeType != null ) { return this.mimeType; } if( tika == null ) { tika = new Tika(); } try { this.mimeType = tika.detect(externFile); } catch (IOException ex) { return "application/octet-stream"; } return this.mimeType; } @Override public void setContents(String text) { try { Charset encoding = Charsets.toCharset(EncodingUtils.getEncoding(text)); FileUtils.write(externFile, text, encoding); } catch (IOException ex) { throw new RuntimeException(ex); } } @Override public String getContentsAsText() { try { Charset encoding = Charsets.toCharset(EncodingUtils.getEncoding(externFile)); return FileUtils.readFileToString(externFile, encoding); } catch (IOException ex) { throw new RuntimeException(ex); } } }