/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client; import com.eas.client.cache.PlatypusFiles; import com.eas.client.cache.PlatypusFilesSupport; import com.eas.script.JsDoc; import com.eas.util.FileUtils; import com.eas.util.IdGenerator; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; /** * * @author vv */ public class AppElementFiles { private final SortedSet<File> files = new TreeSet<>(); private final Set<String> filesExtensions = new HashSet<>(); public AppElementFiles() { super(); } public void addFile(File file) { files.add(file); if (!file.isDirectory()) { filesExtensions.add(FileUtils.getFileExtension(file)); } } public Set<File> getFiles() { return Collections.unmodifiableSet(files); } public String getAppElementId() throws IOException { Integer appElementType = getAppElementType(); if (appElementType != null) { switch (appElementType) { case ClientConstants.ET_COMPONENT: case ClientConstants.ET_FORM: case ClientConstants.ET_REPORT: { return null; } case ClientConstants.ET_QUERY: { File sqlFile = findFileByExtension(PlatypusFiles.SQL_EXTENSION); String fileContent = FileUtils.readString(sqlFile, PlatypusFiles.DEFAULT_ENCODING); return PlatypusFilesSupport.getAnnotationValue(fileContent, JsDoc.Tag.NAME_TAG); } case ClientConstants.ET_DB_SCHEME: return IdGenerator.genId() + ""; default: return null; } } else { return null; } } public Integer getAppElementType() { if (hasExtension(PlatypusFiles.JAVASCRIPT_EXTENSION) && hasExtension(PlatypusFiles.FORM_EXTENSION)) { return ClientConstants.ET_FORM; } else if (hasExtension(PlatypusFiles.JAVASCRIPT_EXTENSION) && (hasExtension(PlatypusFiles.REPORT_LAYOUT_EXTENSION) || hasExtension(PlatypusFiles.REPORT_LAYOUT_EXTENSION_X))) { return ClientConstants.ET_REPORT; } else if (hasExtension(PlatypusFiles.JAVASCRIPT_EXTENSION)) { return ClientConstants.ET_COMPONENT; } else if (hasExtension(PlatypusFiles.SQL_EXTENSION) && hasExtension(PlatypusFiles.MODEL_EXTENSION)) { return ClientConstants.ET_QUERY; } else if (hasExtension(PlatypusFiles.DB_SCHEME_EXTENSION)) { return ClientConstants.ET_DB_SCHEME; } return null; } public boolean isModule() { Integer type = getAppElementType(); if (type != null) { return type == ClientConstants.ET_COMPONENT || type == ClientConstants.ET_FORM || type == ClientConstants.ET_REPORT; } else { return false; } } public boolean hasExtension(String ext) { return filesExtensions.contains(ext); } public File findFileByExtension(String aExt) { for (File file : files) { String ext = FileUtils.getFileExtension(file); if (ext != null && ext.equalsIgnoreCase(aExt)) { return file; } } return null; } private File removeFileByExtension(String ext) { if (ext != null) { for (File file : files) { if (ext.equals(FileUtils.getFileExtension(file))) { files.remove(file); filesExtensions.remove(ext); return file; } } } return null; } public File removeFile(File aFile) { return removeFileByExtension(FileUtils.getFileExtension(aFile)); } public boolean isEmpty() { return files.isEmpty(); } public Date getLastModified() { long lastModified = 0; for (File file : files) { if (file.lastModified() > lastModified) { lastModified = file.lastModified(); } } return lastModified != 0 ? new Date(lastModified) : null; } public AppElementFiles copy() { AppElementFiles aFiles = new AppElementFiles(); files.stream().forEach((f) -> { aFiles.addFile(f); }); return aFiles; } }