Coverage Report - org.xmlhammer.gui.stylesheetvalidator.StylesheetValidatorProjectView
 
Classes in this File Line Coverage Branch Coverage Complexity
StylesheetValidatorProjectView
76% 
81% 
0
 
 1  
 /*
 2  
  * $Id$
 3  
  *
 4  
  * The contents of this file are subject to the Mozilla Public License 
 5  
  * Version 1.1 (the "License"); you may not use this file except in 
 6  
  * compliance with the License. You may obtain a copy of the License at 
 7  
  * http://www.mozilla.org/MPL/ 
 8  
  *
 9  
  * Software distributed under the License is distributed on an "AS IS" basis, 
 10  
  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
 11  
  * for the specific language governing rights and limitations under the License.
 12  
  *
 13  
  * The Original Code is XML Hammer code. (org.xmlhammer.*)
 14  
  *
 15  
  * The Initial Developer of the Original Code is Edwin Dankert. Portions created 
 16  
  * by the Initial Developer are Copyright (C) 2005 - 2006 the Initial Developer. 
 17  
  * All Rights Reserved.
 18  
  *
 19  
  * Contributor(s): Edwin Dankert <edankert@gmail.com>
 20  
  */
 21  
 
 22  
 package org.xmlhammer.gui.stylesheetvalidator;
 23  
 
 24  
 import java.net.URI;
 25  
 import java.util.List;
 26  
 
 27  
 import javax.swing.Icon;
 28  
 import javax.swing.ImageIcon;
 29  
 
 30  
 import org.apache.log4j.Logger;
 31  
 import org.bounce.image.ImageLoader;
 32  
 import org.bounce.util.URIUtils;
 33  
 import org.xmlhammer.Module;
 34  
 import org.xmlhammer.PreferencesHandler;
 35  
 import org.xmlhammer.ResultModel;
 36  
 import org.xmlhammer.gui.ProjectView;
 37  
 import org.xmlhammer.gui.ProjectsView;
 38  
 import org.xmlhammer.gui.output.SourceBuilder;
 39  
 import org.xmlhammer.gui.preferences.PropertiesDialog;
 40  
 import org.xmlhammer.gui.status.StatusBar;
 41  
 import org.xmlhammer.gui.status.ValidationStatusBar;
 42  
 import org.xmlhammer.gui.util.JAXPSettings;
 43  
 import org.xmlhammer.model.jaxp.Attribute;
 44  
 import org.xmlhammer.model.jaxp.Feature;
 45  
 import org.xmlhammer.model.jaxp.JAXPTransformerFactory;
 46  
 import org.xmlhammer.model.jaxp.Settings;
 47  
 import org.xmlhammer.model.project.Filter;
 48  
 import org.xmlhammer.model.project.Project;
 49  
 
 50  
 /**
 51  
  * The UI representation of a Project.
 52  
  * 
 53  
  * @version $Revision$, $Date$
 54  
  * @author Edwin Dankert <edankert@gmail.com>s
 55  
  */
 56  
 public class StylesheetValidatorProjectView extends ProjectView {
 57  
         private static final long serialVersionUID = 4121138017445755189L;
 58  22
     private static final ImageIcon ICON = ImageLoader.get().getImage("/org/xmlhammer/gui/icons/etool16/stylesheetvalidator.gif");
 59  
         
 60  66
         private PropertiesDialog propertiesDialog = null;
 61  66
     private SourceBuilder source = null;
 62  
         
 63  
         /**
 64  
          * @param parent the projects view parent.
 65  
          * @param uri the uri for the project.
 66  
          */
 67  
         public StylesheetValidatorProjectView( ProjectsView parent, URI uri) {
 68  66
                 super( parent, uri);
 69  
         
 70  66
         source = new SourceBuilder();
 71  
 
 72  66
         initPages();
 73  66
         }
 74  
         
 75  
     protected void createPages() {
 76  66
         addPage(createInputPage());
 77  66
     }
 78  
 
 79  
     /**
 80  
          * Show the properties dialog.
 81  
          */
 82  
         public void showPropertiesDialog() {
 83  0
                 Settings settings = getProject(null).getJAXPSettings();
 84  
 
 85  0
                 if (propertiesDialog == null) {
 86  0
                         propertiesDialog = new PropertiesDialog(getProjectsView().getRoot(), false, false, false, true, false);
 87  
                 }
 88  
 
 89  0
         JAXPTransformerFactory transformerFactory = settings.getJAXPTransformerFactory();
 90  0
         if (transformerFactory == null) {
 91  0
             transformerFactory = new JAXPTransformerFactory();
 92  
         }
 93  
 
 94  0
         propertiesDialog.setTransformerFactory(transformerFactory);
 95  
 
 96  0
                 if ( propertiesDialog.open() == PropertiesDialog.OK_OPTION) {
 97  0
             settings.setJAXPTransformerFactory(propertiesDialog.getTransformerFactory());
 98  
 
 99  0
             updateSchemaLanguages();
 100  
                  }
 101  0
         }
 102  
 
 103  
     /**
 104  
      * Returns the status bar.
 105  
      * 
 106  
      * @return the status bar.
 107  
      */
 108  
     public StatusBar getStatusBar() {
 109  242
         if ( statusBar  == null) {
 110  66
             statusBar = new ValidationStatusBar();
 111  
         }
 112  
         
 113  242
         return statusBar;
 114  
     }
 115  
 
 116  
     public void setProject( Project project) {
 117  66
         this.project = project;
 118  
 
 119  66
         if (getInputPage() != null) {
 120  66
             if (project != null) {
 121  66
                 getInputPage().setInput(getURI(), project.getInput());
 122  66
             } else {
 123  0
                 getInputPage().setInput(getURI(), null);
 124  
             }
 125  
         }
 126  
         
 127  66
         getFieldManager().setChanged(false);
 128  66
         getUndoManager().discardAllEdits();
 129  66
     }
 130  
 
 131  
     protected void updateSchemaLanguages() {
 132  0
         Logger.getLogger(getClass()).debug("updateSchemaLanguages()");
 133  0
     }
 134  
 
 135  
     /**
 136  
      * @return the underlying project, setting input and parser values .
 137  
      */
 138  
     public Project getProject(URI base) {
 139  154
         if ( project == null) {
 140  0
             project = new Project();
 141  
         }
 142  
 
 143  154
         if (getInputPage() != null) {
 144  154
             project.setInput(getInputPage().getInput(base));
 145  
         }
 146  
         
 147  154
         return project;
 148  
     }
 149  
 
 150  
     /**
 151  
      * @return the result model.
 152  
      */
 153  
     public ResultModel getResult() {
 154  44
         URI dir = null;
 155  
 
 156  44
         if (getInputPage() != null) {
 157  44
             Filter filter = getInputPage().getInput(null).getFilter();
 158  44
             if ( filter != null) {
 159  0
                 dir = URIUtils.createURI( filter.getDir());
 160  
             }
 161  
         }
 162  
 
 163  44
         return getResultPanel().createModel( dir);
 164  
         }
 165  
         
 166  
     public SourceBuilder getSource() {
 167  154
         StringBuilder builder = new StringBuilder();
 168  
         
 169  154
         if (getInputPage() != null) {
 170  154
             builder.append("\n\n");
 171  154
             appendJavaImports(builder);
 172  154
             builder.append("\n");
 173  154
             appendTransformerImports(builder);
 174  154
             builder.append("\n");
 175  
 
 176  154
             SourceBuilder.appendReserved(builder, "public class ");
 177  154
             builder.append("XMLStylesheetValidator {\n\n");
 178  154
             SourceBuilder.appendReserved(builder, "    public void ");
 179  154
             builder.append("validate(URI uri) {\n");
 180  
             
 181  154
             appendTransformerSource(builder);
 182  
             
 183  154
             builder.append("    }\n\n");
 184  154
             appendErrorListener(builder);
 185  154
             builder.append("}\n");
 186  
         }
 187  
 
 188  154
         source.reset();
 189  154
         source.addCode(builder.toString());
 190  154
         source.appendDisclaimer();
 191  
 
 192  154
         return source;
 193  
     }
 194  
     
 195  
     public void appendJavaImports(StringBuilder builder) {
 196  154
         SourceBuilder.appendImport(builder, "java.net.URI");
 197  154
     }
 198  
 
 199  
     public void appendTransformerImports(StringBuilder builder) {
 200  154
         SourceBuilder.appendImport(builder, "javax.xml.transform.ErrorListener");
 201  154
         SourceBuilder.appendImport(builder, "javax.xml.transform.TransformerException");
 202  154
         SourceBuilder.appendImport(builder, "javax.xml.transform.TransformerFactory");
 203  154
         SourceBuilder.appendImport(builder, "javax.xml.transform.stream.StreamSource");
 204  154
     }
 205  
 
 206  
     public void appendTransformerSource(StringBuilder builder) {
 207  154
         if (getProject().getJAXPSettings() != null) {
 208  154
             builder.append("\n");
 209  
 
 210  154
             JAXPSettings jaxp = new JAXPSettings(PreferencesHandler.getInstance().getPreferences().getJAXPSettings(), getProject().getJAXPSettings());
 211  
     
 212  154
             JAXPTransformerFactory.Settings settings = jaxp.getTransformerFactorySettings();
 213  
             
 214  154
             if (settings.getValue() != null) {
 215  0
                 builder.append("        System.setProperty(");
 216  0
                 SourceBuilder.appendConstant(builder, "\"javax.xml.transform.TransformerFactory\"");
 217  0
                 builder.append(", ");
 218  0
                 SourceBuilder.appendConstant(builder, "\""+settings.getValue()+"\"");
 219  0
                 builder.append(");\n\n");
 220  
             }
 221  
             
 222  154
             SourceBuilder.appendReserved(builder, "        try ");
 223  154
             builder.append("{\n");
 224  154
             builder.append("            TransformerFactory transformerFactory = TransformerFactory.newInstance();\n\n");
 225  154
             builder.append("            transformerFactory.setErrorListener(");
 226  154
             SourceBuilder.appendReserved(builder, "new ");
 227  154
             builder.append("SimpleErrorListener());\n");
 228  
 
 229  154
             List<Feature> features = jaxp.getTransformerFactoryFeatures();
 230  
 
 231  154
             for (Feature feature : features) {
 232  0
                 builder.append("            transformerFactory.setFeature(");
 233  0
                 SourceBuilder.appendConstant(builder, "\""+feature.getName()+"\"");
 234  0
                 builder.append(", ");
 235  0
                 SourceBuilder.appendConstant(builder, feature.isEnabled());
 236  0
                 builder.append(");\n");
 237  0
             }
 238  
 
 239  154
             List<Attribute> attributes = jaxp.getTransformerFactoryAttributes();
 240  
 
 241  154
             for (Attribute attribute : attributes) {
 242  0
                 builder.append("            transformerFactory.setAttribute(");
 243  0
                 SourceBuilder.appendConstant(builder, "\""+attribute.getName()+"\"");
 244  0
                 builder.append(", ");
 245  0
                 SourceBuilder.appendConstant(builder, "\""+attribute.getValue()+"\"");
 246  0
                 builder.append(");\n");
 247  0
             }
 248  
 
 249  154
             builder.append("            transformerFactory.newTransformer(");
 250  154
             SourceBuilder.appendReserved(builder, "new");
 251  154
             builder.append(" StreamSource(uri.toString()));\n");
 252  
             
 253  154
             SourceBuilder.appendCatch(builder, "        ", "TransformerException");
 254  154
             builder.append("        }\n");
 255  
         }
 256  154
     }
 257  
     
 258  
     public static void appendErrorListener(StringBuilder builder) {
 259  154
         SourceBuilder.appendReserved(builder, "    public ");
 260  154
         SourceBuilder.appendReserved(builder, "class ");
 261  154
         builder.append("SimpleErrorListener ");
 262  154
         SourceBuilder.appendReserved(builder, "implements");
 263  154
         builder.append(" ErrorListener {\n");
 264  
 
 265  154
         appendErrorListenerMethod(builder, "warning");
 266  154
         builder.append("\n");
 267  154
         appendErrorListenerMethod(builder, "error");
 268  154
         builder.append("\n");
 269  154
         appendErrorListenerMethod(builder, "fatalError");
 270  154
         builder.append("    }\n");
 271  154
     }
 272  
 
 273  
     private static void appendErrorListenerMethod(StringBuilder builder, String method) {
 274  462
         SourceBuilder.appendReserved(builder, "        public void ");
 275  462
         builder.append(method);
 276  462
         builder.append("(TransformerException e) ");
 277  462
         SourceBuilder.appendReserved(builder, "throws");
 278  462
         builder.append(" TransformerException {\n");
 279  462
         builder.append("            System.");
 280  462
         SourceBuilder.appendConstant(builder, "out");
 281  462
         builder.append(".println(e.getMessage());\n");
 282  462
         builder.append("        }\n");
 283  462
     }
 284  
     
 285  
         /**
 286  
          * @return the module to run.
 287  
          */
 288  
         public Module getModule() {
 289  44
         return new StylesheetValidatorModule(PreferencesHandler.getInstance().getPreferences(), getProject(null), getLogger());
 290  
         }
 291  
     
 292  
     public void dispose() {
 293  66
         if (getInputPage() != null) {
 294  66
             getInputPage().dispose();
 295  
         }
 296  66
     }
 297  
     
 298  
     public Icon getIcon() {
 299  616
         return ICON;
 300  
     }
 301  
 
 302  
     @Override
 303  
     public String getHelpID() {
 304  132
         return "project.style";
 305  
     }
 306  
 }