Package tk.eclipse.plugin.htmleditor.wizards

Source Code of tk.eclipse.plugin.htmleditor.wizards.XMLNewWizardPage

package tk.eclipse.plugin.htmleditor.wizards;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.impl.xs.XMLSchemaLoader;
import org.apache.xerces.xni.parser.XMLInputSource;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;

import tk.eclipse.plugin.htmleditor.HTMLUtil;
import tk.eclipse.plugin.xmleditor.editors.DTDResolver;
import tk.eclipse.plugin.xmleditor.editors.IDTDResolver;

public class XMLNewWizardPage extends WizardNewFileCreationPage {
 
  // for DTD
  private boolean useDTD = false;
  private String publicID = "";
  private String systemID = "";
  // for XSD
  private boolean useXSD = false;
  private String schemaURI = "";
 
  private String documentRoot = "";
 
 
  public XMLNewWizardPage(String pageName, IStructuredSelection selection) {
    super(pageName, selection);
  }
 
  public void setSchemaInfo(boolean useDTD,String publicID,String systemID,
      boolean useXSD,String schemaURI,String documentRoot){
    this.useDTD       = useDTD;
    this.publicID     = publicID;
    this.systemID     = systemID;
    this.documentRoot = documentRoot;
    this.useXSD       = useXSD;
    this.schemaURI    = schemaURI;
  }
 
  public IFile getFile(){
    IPath newFilePath = getContainerFullPath().append(getFileName());
    return createFileHandle(newFilePath);
  }
 
  protected InputStream getInitialContents() {
    // charset encoding
    String projectName = getContainerFullPath().segment(0);
    IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
    String charset = HTMLUtil.getProjectCharset(project);
//    try {
//      String projectName = getContainerFullPath().segment(0);
//      IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
//      charset = project.getDefaultCharset();
//    } catch(CoreException ex){
//    }
    // generate XML
    StringBuffer sb = new StringBuffer();
    sb.append("<?xml version=\"1.0\"");
    if(charset!=null){
      sb.append(" encoding=\"" + charset + "\"");
    }
    sb.append("?>\n");
   
    // DOCTYPE decl
    if(useDTD){
      if(!publicID.equals("") || !systemID.equals("")){
        sb.append("<!DOCTYPE ");
        sb.append(documentRoot);
        sb.append(" PUBLIC");
        sb.append(" \"" + publicID + "\"");
        sb.append(" \"" + systemID + "\"");
        sb.append(">\n");
      }
    }
   
    // generate the root tag
    if(useDTD || useXSD){
      if(!documentRoot.equals("")){
        sb.append("<").append(documentRoot);
        if(useXSD){
          String namespace = getTargetNamespace();
          if(namespace!=null){
            sb.append("\txmlns=\"" + namespace + "\"\n");
            sb.append("\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
            sb.append("\txsi:schemaLocation=\"" + namespace + " " + schemaURI + "\"");
          } else {
            sb.append("\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
            sb.append("\txsi:noNamespaceSchemaLocation=\"" + schemaURI + "\"");
          }
        }
        sb.append(">\n");
        sb.append("</").append(documentRoot).append(">\n");
      }
    }
   
    return new ByteArrayInputStream(sb.toString().getBytes());
  }
 
  /** Returns a target namespace of XML Schema */
  private String getTargetNamespace(){
    try {
      DTDResolver resolver = new DTDResolver(new IDTDResolver[0],
          getFile().getLocation().makeAbsolute().toFile().getParentFile());
      InputStream in = resolver.getInputStream(this.schemaURI);
      if(in!=null){
        SchemaGrammar grammer = (SchemaGrammar)new XMLSchemaLoader().loadGrammar(
            new XMLInputSource(null,null,null,in,null));
        return grammer.getTargetNamespace();
      }
    } catch(Exception ex){
    }
    return null;
  }
}
TOP

Related Classes of tk.eclipse.plugin.htmleditor.wizards.XMLNewWizardPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.