Package tk.eclipse.plugin.htmleditor.wizards

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

package tk.eclipse.plugin.htmleditor.wizards;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

import org.apache.xerces.impl.xs.SchemaGrammar;
import org.apache.xerces.impl.xs.XMLSchemaLoader;
import org.apache.xerces.xni.parser.XMLInputSource;
import org.apache.xerces.xs.XSConstants;
import org.apache.xerces.xs.XSElementDeclaration;
import org.apache.xerces.xs.XSNamedMap;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

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

import com.wutka.dtd.DTD;
import com.wutka.dtd.DTDElement;
import com.wutka.dtd.DTDParser;

public class XMLDTDWizardPage extends WizardPage {
 
  private Text   textPublicID;
  private Combo  comboSystemID;
  private Combo  comboDocumentRoot;
  private Combo  comboSchemaURI;
  private Button radioNone;
  private Button radioDTD;
  private Button radioXSD;
  private Button buttonLoadDTD;
  private XMLNewWizardPage page1;
 
  public XMLDTDWizardPage(String pageName, XMLNewWizardPage page1) {
    super(pageName);
    setTitle(HTMLPlugin.getResourceString("XMLDTDWizardPage.Title"));
    setDescription(HTMLPlugin.getResourceString("XMLDTDWizardPage.Description"));
    this.page1 = page1;
  }
 
  public void createControl(Composite parent) {
    Composite composite = new Composite(parent,SWT.NULL);
    composite.setLayout(new GridLayout(2,false));
    composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL|GridData.GRAB_HORIZONTAL));
   
    Composite radios = new Composite(composite,SWT.NULL);
    radios.setLayout(new FillLayout(SWT.VERTICAL));
    GridData gd = new GridData();
    gd.horizontalSpan = 2;
    radios.setLayoutData(gd);
    radios.setLayoutData(gd);
   
    radioNone = new Button(radios,SWT.RADIO);
    radioNone.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.NoSchema"));
    radioNone.setSelection(true);
    radioNone.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        if(radioNone.getSelection()){
          textPublicID.setEnabled(false);
          comboSystemID.setEnabled(false);
          comboSchemaURI.setEnabled(false);
          buttonLoadDTD.setEnabled(false);
          comboDocumentRoot.setEnabled(false);
        }
        setPageComplete(validatePage());
      }
    });
   
    radioDTD = new Button(radios,SWT.RADIO);
    radioDTD.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.UseDID"));
    radioDTD.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        if(radioDTD.getSelection()){
          textPublicID.setEnabled(true);
          comboSystemID.setEnabled(true);
          comboSchemaURI.setEnabled(false);
          buttonLoadDTD.setEnabled(true);
          comboDocumentRoot.setEnabled(true);
        }
        setPageComplete(validatePage());
      }
    });
   
    radioXSD = new Button(radios,SWT.RADIO);
    radioXSD.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.UseXSD"));
    radioXSD.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        if(radioXSD.getSelection()){
          textPublicID.setEnabled(false);
          comboSystemID.setEnabled(false);
          comboSchemaURI.setEnabled(true);
          buttonLoadDTD.setEnabled(true);
          comboDocumentRoot.setEnabled(true);
        }
        setPageComplete(validatePage());
      }
    });
   
   
    Label label = new Label(composite,SWT.NULL);
    label.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.PublicID"));
   
    textPublicID = new Text(composite,SWT.BORDER);
    textPublicID.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    textPublicID.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent e){
        setPageComplete(validatePage());
      }
    });
   
    label = new Label(composite,SWT.NULL);
    label.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.SystemID"));
   
    comboSystemID = new Combo(composite,SWT.DROP_DOWN);
    comboSystemID.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   
    // Load DTD / XSD Configuration from PreferenceStore
    IPreferenceStore store = HTMLPlugin.getDefault().getPreferenceStore();
    String[] uri  = store.getString(HTMLPlugin.PREF_DTD_URI).split("\n");
    for(int i=0;i<uri.length;i++){
      if(uri[i].endsWith(".dtd")){
        comboSystemID.add(uri[i]);
      }
    }
    comboSystemID.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent e){
        setPageComplete(validatePage());
      }
    });
   
    label = new Label(composite,SWT.NULL);
    label.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.XMLSchema"));
    comboSchemaURI = new Combo(composite,SWT.DROP_DOWN);
    comboSchemaURI.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   
    for(int i=0;i<uri.length;i++){
      if(uri[i].endsWith(".xsd")){
        comboSchemaURI.add(uri[i]);
      }
    }
    comboSchemaURI.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent e){
        setPageComplete(validatePage());
      }
    });
   
    buttonLoadDTD = new Button(composite,SWT.PUSH);
    buttonLoadDTD.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.LoadDTD"));
    buttonLoadDTD.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(SelectionEvent evt){
        try {
          if(getUseDTD()){
            // Load elements from DTD
            String systemID = comboSystemID.getText();
            comboDocumentRoot.removeAll();
            DTDResolver resolver = new DTDResolver(new IDTDResolver[0],
                page1.getFile().getLocation().makeAbsolute().toFile().getParentFile());
            InputStream in = resolver.getInputStream(systemID);
//            if(in==null){
//              URL url = new URL(systemID);
//              in = url.openStream();
//            }
            if(in!=null){
              Reader reader = new InputStreamReader(in);
              DTDParser parser = new DTDParser(reader);
              DTD dtd = parser.parse();
              Object[] obj = dtd.getItems();
              for(int i=0;i<obj.length;i++){
                if(obj[i] instanceof DTDElement){
                  DTDElement element = (DTDElement)obj[i];
                  String name = element.getName();
                  comboDocumentRoot.add(name);
                }
              }
              comboDocumentRoot.select(0);
            }
          }
          if(getUseXSD()){
            // Load elements from XML Schema
            comboDocumentRoot.removeAll();
            DTDResolver resolver = new DTDResolver(new IDTDResolver[0],
                page1.getFile().getLocation().makeAbsolute().toFile().getParentFile());
            InputStream in = resolver.getInputStream(getSchemaURI());
            if(in!=null){
              SchemaGrammar grammer = (SchemaGrammar)new XMLSchemaLoader().loadGrammar(
                  new XMLInputSource(null,null,null,in,null));
              XSNamedMap map = grammer.getComponents(XSConstants.ELEMENT_DECLARATION);
              for(int i=0;i<map.getLength();i++){
                XSElementDeclaration element = (XSElementDeclaration)map.item(i);
                comboDocumentRoot.add(element.getName());
              }
            }
          }
        } catch(Exception ex){
          HTMLPlugin.openAlertDialog(ex.toString());
        }
      }
    });
   
    label = new Label(composite,SWT.NULL);
   
    label = new Label(composite,SWT.NULL);
    label.setText(HTMLPlugin.getResourceString("XMLDTDWizardPage.DocumentRoot"));
   
    comboDocumentRoot = new Combo(composite,SWT.READ_ONLY);
    comboDocumentRoot.addModifyListener(new ModifyListener(){
      public void modifyText(ModifyEvent e){
        setPageComplete(validatePage());
      }
    });
   
    // Disable all widgets at first
    textPublicID.setEnabled(false);
    comboSystemID.setEnabled(false);
    comboSchemaURI.setEnabled(false);
    buttonLoadDTD.setEnabled(false);
    comboDocumentRoot.setEnabled(false);
   
    setErrorMessage(null);
    setMessage(null);
    setControl(composite);
  }
 
  public boolean getUseDTD(){
    return radioDTD.getSelection();
  }
 
  public boolean getUseXSD(){
    return radioXSD.getSelection();
  }
 
  public String getSystemID(){
    return comboSystemID.getText();
  }
 
  public String getPublicID(){
    return textPublicID.getText();
  }
 
  public String getSchemaURI(){
    return comboSchemaURI.getText();
  }
 
  public String getDocumentRoot(){
    return comboDocumentRoot.getText();
  }

  private boolean validatePage(){
    if(getUseDTD()){
      if(getPublicID().equals("")){
        setMessage(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{HTMLPlugin.getResourceString("XMLDTDWizardPage.Message.PublicID")}),
            DialogPage.ERROR);
        return false;
      } else if(getSystemID().equals("")){
        setMessage(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{HTMLPlugin.getResourceString("XMLDTDWizardPage.Message.SystemID")}),
            DialogPage.ERROR);
        return false;
      } else if(getDocumentRoot().equals("")){
        setMessage(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{HTMLPlugin.getResourceString("XMLDTDWizardPage.Message.DocumentRoot")}),
            DialogPage.ERROR);
        return false;
      }
    }
    if(getUseXSD()){
      if(getSchemaURI().equals("")){
        setMessage(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{HTMLPlugin.getResourceString("XMLDTDWizardPage.Message.XMLSchema")}),
            DialogPage.ERROR);
        return false;
      } else if(getDocumentRoot().equals("")){
        setMessage(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{HTMLPlugin.getResourceString("XMLDTDWizardPage.Message.DocumentRoot")}),
            DialogPage.ERROR);
        return false;
      }
    }
    setMessage(null);
    return true;
  }
}
TOP

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

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.