/* * File : ProjectInstaller.java * Created : 05-aug-2002 15:12 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.project; import edu.xtec.jclic.fileSystem.FileSystem; import edu.xtec.util.Domable; import edu.xtec.util.JDomUtility; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.08.14 */ public class ProjectInstaller implements Domable{ public static final String SEP=";", ITEM_SEP=",", EQUAL_SEP=":", FILES="files"; public static final String ITEM_NAMES="itemNames", ITEM_PROJECTS="itemProjects", ITEM_ICONS="itemIcons", ITEM_DESCRIPTIONS="itemDescriptions"; public static final String ELEMENT_NAME="JClicInstall"; public static final String TITLE="title", AUTHORS="authors", FROM="from"; public static final String FILE="file", SRC="src", FOLDER="folder"; public static final String SHORTCUT="shortcut", ICON="icon", PROJECT="project", TEXT="text", DESCRIPTION="description"; public static final String INSTALLER_EXTENSION=".jclic.inst"; public String fName; public String from; public String baseFolder; public String projectTitle; public String authors; public List<String> files; public List<IconItem> iconItems; /** Creates a new instance of ProjectInstaller */ public ProjectInstaller() { files=new ArrayList<String>(); iconItems=new ArrayList<IconItem>(); } public org.jdom.Element getJDomElement(){ return getJDomElement(true); } public org.jdom.Element getJDomElement(boolean includeFrom){ org.jdom.Element child; org.jdom.Element e=new org.jdom.Element(ELEMENT_NAME); JDomUtility.setStringAttr(e, TITLE, projectTitle, false); JDomUtility.setStringAttr(e, AUTHORS, authors, false); JDomUtility.setStringAttr(e, FOLDER, baseFolder, false); if(includeFrom) JDomUtility.setStringAttr(e, FROM, from, false); if(files!=null){ for(int i=0; i<files.size(); i++){ child=new org.jdom.Element(FILE); child.setAttribute(SRC, getFile(i)); e.addContent(child); } } if(iconItems!=null){ for(IconItem ii : iconItems){ child=new org.jdom.Element(SHORTCUT); JDomUtility.setStringAttr(child, PROJECT, ii.project, false); JDomUtility.setStringAttr(child, TEXT, ii.text, false); JDomUtility.setStringAttr(child, DESCRIPTION, ii.description, false); JDomUtility.setStringAttr(child, ICON, ii.icon, false); e.addContent(child); } } return e; } public static ProjectInstaller getProjectInstaller(String fileName) throws Exception{ InputStream is; boolean isUrl=FileSystem.isStrUrl(fileName); URL url=null; File f=null; if(isUrl){ url=new URL(fileName); is=url.openStream(); } else{ f=new File(fileName); is=new FileInputStream(f); } org.jdom.Document doc=JDomUtility.getSAXBuilder().build(is); edu.xtec.util.JDomUtility.clearNewLineElements(doc.getRootElement()); is.close(); ProjectInstaller result=getProjectInstaller(doc.getRootElement()); String from = null; String fName = null; if(isUrl && url!=null){ String s0=url.toExternalForm(); int k=s0.lastIndexOf('/'); if(k<0) throw new Exception("Unable to get install store path from "+s0); from=s0.substring(0, k); fName=s0.substring(k+1); } else if(f!=null){ from=f.getParent(); fName=f.getName(); } if(from!=null) result.from=from; if(fName!=null) result.fName=fName; return result; } public static ProjectInstaller getProjectInstaller(org.jdom.Element e) throws Exception{ ProjectInstaller pi=new ProjectInstaller(); pi.setProperties(e, null); return pi; } public void setProperties(org.jdom.Element e, Object aux) throws Exception{ org.jdom.Element child; JDomUtility.checkName(e, ELEMENT_NAME); projectTitle=JDomUtility.getStringAttr(e, TITLE, projectTitle, false); authors=JDomUtility.getStringAttr(e, AUTHORS, authors, false); baseFolder=JDomUtility.getStringAttr(e, FOLDER, baseFolder, false); from=JDomUtility.getStringAttr(e, FROM, from, false); Iterator it=e.getChildren(FILE).iterator(); while(it.hasNext()){ child=(org.jdom.Element)it.next(); addFile(JDomUtility.getStringAttr(child, SRC, null, false)); } it=e.getChildren(SHORTCUT).iterator(); while(it.hasNext()){ child=(org.jdom.Element)it.next(); IconItem ii=createIconItem(); ii.project=JDomUtility.getStringAttr(child, PROJECT, ii.project, false); ii.text=JDomUtility.getStringAttr(child, TEXT, ii.text, false); ii.description=JDomUtility.getStringAttr(child, DESCRIPTION, ii.description, false); ii.icon=JDomUtility.getStringAttr(child, ICON, ii.icon, false); } } public void addFile(String s){ if(s!=null && !files.contains(s)) files.add(s); } public String getFile(int i){ if(files!=null && i<files.size()) return (String)files.get(i); else return null; } public IconItem getIconItem(int i){ if(iconItems!=null && i<iconItems.size()) return (IconItem)iconItems.get(i); else return null; } public IconItem createIconItem(){ IconItem result=new IconItem(); iconItems.add(result); return result; } public class IconItem{ protected String text; protected String description; protected String project; protected String icon; @Override public String toString(){ return (project==null ? "--" : project); } /** Getter for property description. * @return Value of property description. */ public String getDescription() { return description; } /** Setter for property description. * @param description New value of property description. */ public void setDescription(String description) { this.description = description; } /** Getter for property icon. * @return Value of property icon. */ public String getIcon() { return icon; } /** Setter for property icon. * @param icon New value of property icon. */ public void setIcon(String icon) { this.icon = icon; } /** Getter for property project. * @return Value of property project. */ public String getProject() { return project; } /** Setter for property project. * @param project New value of property project. */ public void setProject(String project) { this.project = project; } /** Getter for property text. * @return Value of property text. */ public String getText() { return text; } /** Setter for property text. * @param text New value of property text. */ public void setText(String text) { this.text = text; } } }