From 8c64caba1a4675a7c21bd398ab5081a0037c889d Mon Sep 17 00:00:00 2001 From: Daniel Garijo Date: Sun, 15 Apr 2018 22:16:56 -0700 Subject: [PATCH] Several bug fixes and improvements Fix #284, Fix #283, Fix #243, Fix #268, Fix #279 Fix #265, Fix #273, Fix #213, Fix #247 --- README.md | 4 +- src/main/java/widoco/Configuration.java | 90 ++++---- src/main/java/widoco/Constants.java | 13 +- src/main/java/widoco/CreateResources.java | 4 +- src/main/java/widoco/gui/GuiController.java | 9 +- src/main/java/widoco/gui/SelectLanguage.form | 34 +-- src/main/java/widoco/gui/SelectLanguage.java | 51 +++-- src/main/java/widoco/gui/TestInterface.form | 201 +++++++++++++++++ src/main/java/widoco/gui/TestInterface.java | 219 +++++++++++++++++++ src/main/resources/lode.zip | Bin 153280 -> 153313 bytes src/main/resources/lode/extraction.xsl | 3 +- src/main/resources/widoco/images/Readme.txt | 3 + src/main/resources/widoco/images/info.png | Bin 0 -> 796 bytes src/main/resources/widoco/images/one.png | Bin 0 -> 654 bytes 14 files changed, 544 insertions(+), 87 deletions(-) create mode 100644 src/main/java/widoco/gui/TestInterface.form create mode 100644 src/main/java/widoco/gui/TestInterface.java create mode 100644 src/main/resources/widoco/images/Readme.txt create mode 100644 src/main/resources/widoco/images/info.png create mode 100644 src/main/resources/widoco/images/one.png diff --git a/README.md b/README.md index ca84b5d..5129ad7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ WIzard for DOCumenting Ontologies (WIDOCO) **Author**: Daniel Garijo Verdejo -**Contributors**: María Poveda, Idafen Santana, Almudena Ruiz, Miguel Angel García, Oscar Corcho, Daniel Vila and Sergio Barrio. +**Contributors**: María Poveda, Idafen Santana, Almudena Ruiz, Miguel Angel García, Oscar Corcho, Daniel Vila, Sergio Barrio, Martin Scharm, Maxime Lefrancois. **Citing WIDOCO**: Please cite the latest version of WIDOCO in Zenodo: https://zenodo.org/badge/latestdoi/11427075. Also see our ISWC 2017 paper: https://iswc2017.semanticweb.org/paper-138 @@ -71,6 +71,8 @@ The `-licensius` flag uses the Licensius web services (http://licensius.com/apid The `-ignoreIndividuals` allows you to ignore the named individuals in the ontology. +The `-includeAnnotationProperties` will include annotation properties defined in your ontology (by default they are not included) + How can I make WIDOCO automatically recognize my vocabulary annotations? ========== There are two ways for making WIDOCO get your vocabulary metadata annotations and use them automatically to document the ontology. diff --git a/src/main/java/widoco/Configuration.java b/src/main/java/widoco/Configuration.java index 41e3ce5..d6d058b 100644 --- a/src/main/java/widoco/Configuration.java +++ b/src/main/java/widoco/Configuration.java @@ -167,10 +167,10 @@ public final void initializeConfig(){ includeIndex = true; includeChangeLog = true; if(languages==null){ - currentLanguage = "en"; languages = new HashMap(); - languages.put("en", false); } + currentLanguage = "en"; + languages.put("en", false); useW3CStyle = true;//by default error = ""; addImportedOntologies = false; @@ -199,10 +199,11 @@ private void initializeOntology(){ License l = new License(); mainOntologyMetadata.setLicense(l); mainOntologyMetadata.setSerializations(new HashMap()); - //add default serializations: rdf/xml, n3 and turtle + //add default serializations: rdf/xml, n3, turtle and json-ld mainOntologyMetadata.addSerialization("RDF/XML", "ontology.xml"); mainOntologyMetadata.addSerialization("TTL", "ontology.ttl"); mainOntologyMetadata.addSerialization("N-Triples", "ontology.nt"); + mainOntologyMetadata.addSerialization("JSON-LD", "ontology.json"); mainOntologyMetadata.setCreators(new ArrayList()); mainOntologyMetadata.setContributors(new ArrayList()); mainOntologyMetadata.setCiteAs(""); @@ -385,7 +386,8 @@ public void loadPropertiesFromOntology(OWLOntology o){ //get name, get URI, add to the config Ontology ont = new Ontology(); ont.setNamespaceURI(i.getOntologyID().getOntologyIRI().get().toString()); - ont.setName(i.getOntologyID().getOntologyIRI().get().getShortForm()); + ont.setName(i.getOntologyID().getOntologyIRI().get().getShortForm().replace("<", "<").replace(">", ">")); + //added replacements so they will be shown in html mainOntologyMetadata.getImportedOntologies().add(ont); }); this.mainOntologyMetadata.setThisVersion(versionUri); @@ -479,49 +481,57 @@ private void completeMetadata(OWLAnnotation a){ mainOntologyMetadata.setNamespaceURI(value); break; case Constants.PROP_DCTERMS_LICENSE: case Constants.PROP_DC_RIGHTS: - case Constants.PROP_SCHEMA_LICENSE: case Constants.PROP_CC_LICENSE: - value = WidocoUtils.getValueAsLiteralOrURI(a.getValue()); - License l = new License(); - if(isURL(value)){ - l.setUrl(value); - l.setName(value); - }else{ - l.setName(value); + case Constants.PROP_SCHEMA_LICENSE: case Constants.PROP_CC_LICENSE: + try{ + value = WidocoUtils.getValueAsLiteralOrURI(a.getValue()); + License l = new License(); + if(isURL(value)){ + l.setUrl(value); + l.setName(value); + }else{ + l.setName(value); + } + mainOntologyMetadata.setLicense(l); + }catch(Exception e){ + System.err.println("Could not retrieve license. Please avoid using blank nodes..."); } - mainOntologyMetadata.setLicense(l); break; case Constants.PROP_DC_CONTRIBUTOR: case Constants.PROP_DCTERMS_CONTRIBUTOR: case Constants.PROP_SCHEMA_CONTRIBUTOR: case Constants.PROP_PAV_CONTRIBUTED_BY: - case Constants.PROP_DC_CREATOR: case Constants.PROP_DCTERMS_CREATOR: case Constants.PROP_SCHEMA_CREATOR: - case Constants.PROP_PAV_CREATED_BY: case Constants.PROP_PROV_ATTRIBUTED_TO: - case Constants.PROP_DC_PUBLISHER: case Constants.PROP_DCTERMS_PUBLISHER: - case Constants.PROP_SCHEMA_PUBLISER: - value = WidocoUtils.getValueAsLiteralOrURI(a.getValue()); - Agent g = new Agent(); - if(isURL(value)){ - g.setURL(value); - g.setName(value); - }else{ - g.setName(value); - g.setURL(""); - } - switch (propertyName) { - case Constants.PROP_DC_CONTRIBUTOR: case Constants.PROP_DCTERMS_CONTRIBUTOR: - case Constants.PROP_SCHEMA_CONTRIBUTOR: case Constants.PROP_PAV_CONTRIBUTED_BY: - mainOntologyMetadata.getContributors().add(g); - break; - case Constants.PROP_DC_CREATOR: case Constants.PROP_DCTERMS_CREATOR: - case Constants.PROP_PAV_CREATED_BY: case Constants.PROP_PROV_ATTRIBUTED_TO: - case Constants.PROP_SCHEMA_CREATOR: - mainOntologyMetadata.getCreators().add(g); - break; - default: - mainOntologyMetadata.setPublisher(g); - break; + case Constants.PROP_DC_CREATOR: case Constants.PROP_DCTERMS_CREATOR: case Constants.PROP_SCHEMA_CREATOR: + case Constants.PROP_PAV_CREATED_BY: case Constants.PROP_PROV_ATTRIBUTED_TO: + case Constants.PROP_DC_PUBLISHER: case Constants.PROP_DCTERMS_PUBLISHER: + case Constants.PROP_SCHEMA_PUBLISER: + try{ + value = WidocoUtils.getValueAsLiteralOrURI(a.getValue()); + Agent g = new Agent(); + if(isURL(value)){ + g.setURL(value); + g.setName(value); + }else{ + g.setName(value); + g.setURL(""); + } + switch (propertyName) { + case Constants.PROP_DC_CONTRIBUTOR: case Constants.PROP_DCTERMS_CONTRIBUTOR: + case Constants.PROP_SCHEMA_CONTRIBUTOR: case Constants.PROP_PAV_CONTRIBUTED_BY: + mainOntologyMetadata.getContributors().add(g); + break; + case Constants.PROP_DC_CREATOR: case Constants.PROP_DCTERMS_CREATOR: + case Constants.PROP_PAV_CREATED_BY: case Constants.PROP_PROV_ATTRIBUTED_TO: + case Constants.PROP_SCHEMA_CREATOR: + mainOntologyMetadata.getCreators().add(g); + break; + default: + mainOntologyMetadata.setPublisher(g); + break; + } + }catch(Exception e){ + System.err.println("Could not retrieve cretor/contirbutor. Please avoid using blank nodes..."); } break; case Constants.PROP_DCTERMS_CREATED: case Constants.PROP_SCHEMA_DATE_CREATED: - case Constants.PROP_PROV_GENERATED_AT_TIME: case Constants.PROP_PAV_CREATED_ON: + case Constants.PROP_PROV_GENERATED_AT_TIME: case Constants.PROP_PAV_CREATED_ON: if(mainOntologyMetadata.getReleaseDate()==null || "".equals(mainOntologyMetadata.getReleaseDate())){ value = a.getValue().asLiteral().get().getLiteral(); mainOntologyMetadata.setReleaseDate(value); diff --git a/src/main/java/widoco/Constants.java b/src/main/java/widoco/Constants.java index e2680cc..c7350df 100644 --- a/src/main/java/widoco/Constants.java +++ b/src/main/java/widoco/Constants.java @@ -525,7 +525,7 @@ public static String getIndexDocument(String resourcesFolderName,Configuration c if(c.getMainOntology().getTitle()!=null &&!"".equals(c.getMainOntology().getTitle())) document += " "+c.getMainOntology().getTitle()+"\n"; else - document += " Ontologies Documentation generated by WIDOCO\n"; + document += " Ontology Documentation generated by WIDOCO\n"; @@ -782,6 +782,8 @@ public static String getProvenanceRDF(Configuration c){ if(c.getMainOntology().getTitle()!=null &&!"".equals(c.getMainOntology().getTitle())){ provrdf+= "\t dc:title \""+c.getMainOntology().getTitle()+"\";\n"; } + String agents = ""; + int i = 0; if(!c.getMainOntology().getCreators().isEmpty()){ Iterator creators = c.getMainOntology().getCreators().iterator(); while(creators.hasNext()){ @@ -791,7 +793,9 @@ public static String getProvenanceRDF(Configuration c){ provrdf+= "\t prov:wasAttributedTo <"+currCreator.getURL()+">;\n"; provrdf+= "\t dc:creator <"+currCreator.getURL()+">;\n"; }else{ - provrdf+= "\t prov:wasAttributedTo [ a prov:Agent; foaf:name \""+currCreator.getName()+"\".];\n"; + provrdf+= "\t prov:wasAttributedTo :agent"+i+";\n";//[ a prov:Agent; foaf:name \""+currCreator.getName()+"\".];\n"; + agents +=":agent"+i+" a prov:Agent; foaf:name \""+currCreator.getName()+"\".\n"; + i++; } } } @@ -803,7 +807,9 @@ public static String getProvenanceRDF(Configuration c){ provrdf+= "\t prov:wasAttributedTo <"+currContrib.getURL()+">;\n"; provrdf+= "\t dc:contributor <"+currContrib.getURL()+">;\n"; }else{ - provrdf+= "\t prov:wasAttributedTo [ a prov:Agent; foaf:name \""+currContrib.getName()+"\".];\n"; + provrdf+= "\t prov:wasAttributedTo :agent"+i+";\n";//[ a prov:Agent; foaf:name \""+currContrib.getName()+"\".];\n"; + agents +=":agent"+i+" a prov:Agent; foaf:name \""+currContrib.getName()+"\".\n"; + i++; } } } @@ -818,6 +824,7 @@ public static String getProvenanceRDF(Configuration c){ provrdf+="\t prov:wasGeneratedAt \""+c.getMainOntology().getReleaseDate()+"\";\n"; } provrdf +=".\n"; + provrdf += agents; return provrdf; } diff --git a/src/main/java/widoco/CreateResources.java b/src/main/java/widoco/CreateResources.java index cfb3d86..cd76545 100644 --- a/src/main/java/widoco/CreateResources.java +++ b/src/main/java/widoco/CreateResources.java @@ -32,6 +32,7 @@ import lode.LODEGeneration; import org.semanticweb.owlapi.formats.N3DocumentFormat; import org.semanticweb.owlapi.formats.NTriplesDocumentFormat; +import org.semanticweb.owlapi.formats.RDFJsonLDDocumentFormat; import org.semanticweb.owlapi.formats.RDFXMLDocumentFormat; import org.semanticweb.owlapi.formats.TurtleDocumentFormat; import org.semanticweb.owlapi.model.OWLOntology; @@ -46,7 +47,7 @@ */ public class CreateResources { - //to do: analyze if this is the right name for the class. Maybe "generate" is better + public static void generateDocumentation(String outFolder, Configuration c, File lodeResources) throws Exception{ String lodeContent; String folderOut = outFolder; @@ -115,6 +116,7 @@ public static void generateDocumentation(String outFolder, Configuration c, File WidocoUtils.writeModel(om, o, new RDFXMLDocumentFormat(), folderOut+File.separator+"ontology.xml"); WidocoUtils.writeModel(om, o, new TurtleDocumentFormat(), folderOut+File.separator+"ontology.ttl"); WidocoUtils.writeModel(om, o, new NTriplesDocumentFormat(), folderOut+File.separator+"ontology.nt"); + WidocoUtils.writeModel(om, o, new RDFJsonLDDocumentFormat(), folderOut+File.separator+"ontology.json"); if(c.isIncludeIndex()){ createIndexDocument(folderOut,c, lode, languageFile); } diff --git a/src/main/java/widoco/gui/GuiController.java b/src/main/java/widoco/gui/GuiController.java index 7e8d62f..6363983 100644 --- a/src/main/java/widoco/gui/GuiController.java +++ b/src/main/java/widoco/gui/GuiController.java @@ -71,7 +71,7 @@ public GuiController(String[] args){ String outFolder="myDocumentation"+(new Date().getTime()), ontology="", configOutFile=null; boolean isFromFile=false, oops = false, rewriteAll=false, getOntoMetadata = true, useW3Cstyle = true, includeImportedOntologies = false, htAccess = false, webVowl=false, errors = false, licensius = false, - generateOnlyCrossRef = false, includeNamedIndividuals=true; + generateOnlyCrossRef = false, includeNamedIndividuals=true, includeAnnotationProperties = false; String confPath=""; String[] languages = null; int i=0; @@ -133,11 +133,13 @@ public GuiController(String[] args){ break; case "-ignoreIndividuals": includeNamedIndividuals=false; - i++; + break; + case "-includeAnnotationProperties": + includeAnnotationProperties = true; break; default: System.out.println("Command"+s+" not recognized."); - System.out.println("Usage: java -jar widoco.jar [-ontFile file] or [-ontURI uri] [-outFolder folderName] [-confFile propertiesFile] [-getOntologyMetadata] [-oops] [-rewriteAll] [-crossRef] [-saveConfig configOutFile] [-lang lang1-lang2] [-includeImportedOntologies] [-htaccess] [-licensius] [-webVowl] [-ignoreIndividuals]\n"); + System.out.println("Usage: java -jar widoco.jar [-ontFile file] or [-ontURI uri] [-outFolder folderName] [-confFile propertiesFile] [-getOntologyMetadata] [-oops] [-rewriteAll] [-crossRef] [-saveConfig configOutFile] [-lang lang1-lang2] [-includeImportedOntologies] [-htaccess] [-licensius] [-webVowl] [-ignoreIndividuals] [-includeAnnotationProperties]\n"); return; } i++; @@ -171,6 +173,7 @@ public GuiController(String[] args){ this.config.setCreateWebVowlVisualization(webVowl); this.config.setUseLicensius(licensius); this.config.setIncludeNamedIndividuals(includeNamedIndividuals); + this.config.setIncludeAnnotationProperties(includeAnnotationProperties); if(languages!=null){ config.removeLanguageToGenerate("en");//default for (String language : languages) { diff --git a/src/main/java/widoco/gui/SelectLanguage.form b/src/main/java/widoco/gui/SelectLanguage.form index 2a37743..34afdac 100644 --- a/src/main/java/widoco/gui/SelectLanguage.form +++ b/src/main/java/widoco/gui/SelectLanguage.form @@ -5,6 +5,7 @@ + @@ -33,9 +34,9 @@ + - @@ -53,7 +54,7 @@ - + @@ -97,37 +98,36 @@ - + - + + - + - + + - + - - + - + - - + - + - + - + - - + diff --git a/src/main/java/widoco/gui/SelectLanguage.java b/src/main/java/widoco/gui/SelectLanguage.java index 95530ff..cd5ecc6 100644 --- a/src/main/java/widoco/gui/SelectLanguage.java +++ b/src/main/java/widoco/gui/SelectLanguage.java @@ -25,7 +25,7 @@ public class SelectLanguage extends javax.swing.JFrame { */ public SelectLanguage(GuiStep2 g, Configuration c) { initComponents(); - + this.setIconImage(c.getWidocoLogoMini()); Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); // Determine the new location of the window int w = this.getSize().width; @@ -51,7 +51,11 @@ else if(nextL.contains("es")){ } else if(nextL.contains("pt")){ pt.setSelected(true); - }else{ + } + else if(nextL.contains("fr")){ + fr.setSelected(true); + } + else{ otherText.setText(nextL); lang = nextL; } @@ -73,16 +77,17 @@ private void initComponents() { doneButton = new javax.swing.JButton(); jLabel2 = new javax.swing.JLabel(); otherText = new javax.swing.JTextField(); - en = new javax.swing.JRadioButton(); - es = new javax.swing.JRadioButton(); it = new javax.swing.JRadioButton(); - fr = new javax.swing.JRadioButton(); - pt = new javax.swing.JRadioButton(); de = new javax.swing.JRadioButton(); + en = new javax.swing.JCheckBox(); + fr = new javax.swing.JCheckBox(); + es = new javax.swing.JCheckBox(); + pt = new javax.swing.JCheckBox(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Languages..."); setAlwaysOnTop(true); + setResizable(false); jLabel1.setText("Select languages from the following list:"); @@ -95,21 +100,20 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { jLabel2.setText("Other (will select labels in that lang):"); - en.setText("en (default)"); - - es.setText("es"); - it.setText("it (coming soon)"); it.setEnabled(false); - fr.setText("fr (coming soon)"); - fr.setEnabled(false); - - pt.setText("pt"); - de.setText("de (coming soon)"); de.setEnabled(false); + en.setText("en (default)"); + + fr.setText("fr"); + + es.setText("es"); + + pt.setText("pt"); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( @@ -122,9 +126,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(pt) + .addComponent(en) .addComponent(fr) .addComponent(es) - .addComponent(en) .addComponent(jLabel1) .addComponent(jLabel2) .addComponent(de) @@ -137,7 +141,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGap(9, 9, 9) .addComponent(en) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(es) @@ -178,6 +182,11 @@ private void doneButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI }else{ this.c.removeLanguageToGenerate("pt"); } + if(fr.isSelected()){ + this.c.addLanguageToGenerate("fr"); + }else{ + this.c.removeLanguageToGenerate("fr"); + } String otherL = otherText.getText(); if(!"".equals(otherL)){ this.c.addLanguageToGenerate(otherL); @@ -200,13 +209,13 @@ private void doneButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JRadioButton de; private javax.swing.JButton doneButton; - private javax.swing.JRadioButton en; - private javax.swing.JRadioButton es; - private javax.swing.JRadioButton fr; + private javax.swing.JCheckBox en; + private javax.swing.JCheckBox es; + private javax.swing.JCheckBox fr; private javax.swing.JRadioButton it; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JTextField otherText; - private javax.swing.JRadioButton pt; + private javax.swing.JCheckBox pt; // End of variables declaration//GEN-END:variables } diff --git a/src/main/java/widoco/gui/TestInterface.form b/src/main/java/widoco/gui/TestInterface.form new file mode 100644 index 0000000..67e810f --- /dev/null +++ b/src/main/java/widoco/gui/TestInterface.form @@ -0,0 +1,201 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/widoco/gui/TestInterface.java b/src/main/java/widoco/gui/TestInterface.java new file mode 100644 index 0000000..6404813 --- /dev/null +++ b/src/main/java/widoco/gui/TestInterface.java @@ -0,0 +1,219 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package widoco.gui; + +import java.awt.Color; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.IOException; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; + +/** + * + * @author dgarijo + */ +public class TestInterface extends javax.swing.JFrame { + + /** + * Creates new form TestInterface + */ + public TestInterface() { + initComponents(); + //set a transparent image + Image icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE); + this.setIconImage(icon); + try { + Image logo = ImageIO.read(ClassLoader.getSystemResource("logo/logo2.png")); + Image l = logo.getScaledInstance(widocoLogo.getWidth(), widocoLogo.getHeight(), Image.SCALE_SMOOTH); + widocoLogo.setIcon(new ImageIcon(l)); + widocoLogo.setText(""); +// this.setIconImage(g.getConfig().getWidocoLogoMini());// + } catch (IOException e) { + System.err.println("Error loading the logo :( "+e.getMessage()); + } + +// Image l = g.getConfig().getWidocoLogo().getScaledInstance(widocoLogo.getWidth(), widocoLogo.getHeight(), Image.SCALE_SMOOTH); + + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + backgroundPanel = new javax.swing.JPanel(); + sidePanel = new javax.swing.JPanel(); + jPanel2 = new javax.swing.JPanel(); + iconNumber = new javax.swing.JLabel(); + jLabel2 = new javax.swing.JLabel(); + jPanel3 = new javax.swing.JPanel(); + widocoLogo = new javax.swing.JLabel(); + jPanel4 = new javax.swing.JPanel(); + jLabel1 = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setResizable(false); + + backgroundPanel.setBackground(new java.awt.Color(204, 204, 204)); + backgroundPanel.setPreferredSize(new java.awt.Dimension(1000, 500)); + backgroundPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); + + sidePanel.setBackground(new java.awt.Color(255, 255, 255)); + sidePanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); + + jPanel2.setBackground(new java.awt.Color(240, 244, 252)); + jPanel2.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + jPanel2MouseClicked(evt); + } + public void mouseEntered(java.awt.event.MouseEvent evt) { + jPanel2MouseEntered(evt); + } + }); + + iconNumber.setIcon(new javax.swing.ImageIcon(getClass().getResource("/widoco/images/one.png"))); // NOI18N + + jLabel2.setFont(new java.awt.Font("Segoe UI", 0, 16)); // NOI18N + jLabel2.setText("Select Template"); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addGap(6, 6, 6) + .addComponent(iconNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(32, Short.MAX_VALUE)) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(iconNumber, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE) + .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + + sidePanel.add(jPanel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 160, -1, 58)); + + jPanel3.setBackground(new java.awt.Color(126, 145, 204)); + + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 200, Short.MAX_VALUE) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 51, Short.MAX_VALUE) + ); + + sidePanel.add(jPanel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 290, -1, -1)); + + widocoLogo.setText("LOGO"); + sidePanel.add(widocoLogo, new org.netbeans.lib.awtextra.AbsoluteConstraints(12, 13, 176, 80)); + + jPanel4.setBackground(new java.awt.Color(240, 244, 252)); + + javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); + jPanel4.setLayout(jPanel4Layout); + jPanel4Layout.setHorizontalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 200, Short.MAX_VALUE) + ); + jPanel4Layout.setVerticalGroup( + jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 50, Short.MAX_VALUE) + ); + + sidePanel.add(jPanel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 360, -1, -1)); + + backgroundPanel.add(sidePanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 200, 500)); + + jLabel1.setText("Change to white at the end"); + backgroundPanel.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(540, 450, -1, -1)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + + pack(); + }// //GEN-END:initComponents + + private void jPanel2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel2MouseClicked + //this is a test that will be changed at the end + this.jPanel2.setBackground(Color.magenta); + //la idea es que cuando hagas un paso, el panel anterior aparezca como completado. + //cada paso tiene un logo con la i. Si haces click, te explica. + }//GEN-LAST:event_jPanel2MouseClicked + + private void jPanel2MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanel2MouseEntered + jPanel2.setToolTipText("Select your template in this step"); + }//GEN-LAST:event_jPanel2MouseEntered + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(TestInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(TestInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(TestInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(TestInterface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new TestInterface().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel backgroundPanel; + private javax.swing.JLabel iconNumber; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; + private javax.swing.JPanel jPanel4; + private javax.swing.JPanel sidePanel; + private javax.swing.JLabel widocoLogo; + // End of variables declaration//GEN-END:variables +} diff --git a/src/main/resources/lode.zip b/src/main/resources/lode.zip index 78c0cd63fe6d7783d7f272873d548c3e2851e1d8..ce99c4a2599e8e1a7855d09d1a9fd7ac6381f5b5 100644 GIT binary patch delta 10065 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 delta 10007 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ɚf^<@ps`sr$a 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 +
:
diff --git a/src/main/resources/widoco/images/Readme.txt b/src/main/resources/widoco/images/Readme.txt new file mode 100644 index 0000000..e10113c --- /dev/null +++ b/src/main/resources/widoco/images/Readme.txt @@ -0,0 +1,3 @@ +icons made by Freepik and Chris Veigt from www.flaticon.com + +Sizes 26x26 \ No newline at end of file diff --git a/src/main/resources/widoco/images/info.png b/src/main/resources/widoco/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..aed742e34f0e32f6e24394d218ec6036c32ad840 GIT binary patch literal 796 zcmV+%1LOROP)$V&hK0;x$v zK~z}7y_d~vQ$ZBPe|ZFAY^`Zk5F%pj2Z*%`(O6wZH|o~$S2SVDFLX&9K+9pclLQIQd+?;`-z9cg*AqO5!-^`se^X|u-8^aB8U^{ROI1iiv zMt}j0SAiwq74Qsr3;Y89&;c9=ZUJSWu4e=I47}I#N$<>f8MrOmrie8e+X>tNE&_Xj zO<*3#0VSQfrnyO=9~cC(z$B0W)_^C#b>N53sfU5Qb)vh#J}ue`3C*3h>=)!RCyWAL zWLN^m+i>3zps2N0w06sr8}g?Lympb48_Xs~n)y6$k@wO$^eTRgJ5phjW;EeLhfW^$ zC5$`ng{9i623>tVpwrZWOO7^Un!jqNXk2-2qTLmjfxoiL1G^pVOm<9(n?4nen$pJ= z1(uK9Ch$VP&j!Fr zy(~qD?1R9L2zDQJcbp1Te7>o+`(Oxo49rH@KvkT>arv=mT`aEH4;<28U(|G6r-L>M zOH6?j6?K$4RiHp&U~;Bu)+Ul2DmsSztBW!o zwKh@mh>1o%FZht#Ut+;(ET)w{u8m0=xMSHbHX?79LMh-Ta6zrvhCXFZ$~mkxJD`F# zskAQ3=9+J7wpB4tsc@JR)qrK-ot|aAGvgK6WZG#?!`kzVB;16A%q~ls6@Zt(bKs3@ ad;Sk%w7!%2wP{HJ0000ywgDy&f{a#V_jq9xNQT%ys4hN6Fa`76O$tJgzTdNxv@+(wulP@+Em3kkmCNc66QMqAkakwn{R zk2F7MbcXHu1g~)jCkvWqJ+IY`3T6|`1!E+<9~9a#9P7CRKQSHiWVnQZN~RI#VF+D# z9zOmx)s2!(wFeJzDMzNaT2oC&_joXuqSe=n(|Kbe9ei&y&gvO_y+wmBTlEW>kvz7K zQ9ib3lpikpIk_I|MNH&;PEJJ o^aFVdvvH&Cpyk*bF7tu>3){e#{ipWx^8f$<07*qoM6N<$g4nJkPXGV_ literal 0 HcmV?d00001