Package uk.ac.osswatch.simal.wicket

Source Code of uk.ac.osswatch.simal.wicket.ToolsPage$ImportFromOhlohForm

package uk.ac.osswatch.simal.wicket;

/*
* Copyright 2008 University of Oxford
*
* Licensed under the Apache License, Version 2.0 (the "License");   *
* you may not use this file except in compliance with the License.  *
* You may obtain a copy of the License at                           *
*                                                                   *
*   http://www.apache.org/licenses/LICENSE-2.0                      *
*                                                                   *
* Unless required by applicable law or agreed to in writing,        *
* software distributed under the License is distributed on an       *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY            *
* KIND, either express or implied.  See the License for the         *
* specific language governing permissions and limitations           *
* under the License.                                                *
*/

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;

import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.util.file.Files;
import org.apache.wicket.util.file.Folder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import uk.ac.osswatch.simal.SimalProperties;
import uk.ac.osswatch.simal.SimalRepositoryFactory;
import uk.ac.osswatch.simal.importData.ImportException;
import uk.ac.osswatch.simal.importData.Ohloh;
import uk.ac.osswatch.simal.importData.PTSWImport;
import uk.ac.osswatch.simal.importData.Pims;
import uk.ac.osswatch.simal.model.ModelSupport;
import uk.ac.osswatch.simal.model.jena.simal.JenaDatabaseSupport;
import uk.ac.osswatch.simal.rdf.DuplicateURIException;
import uk.ac.osswatch.simal.rdf.ISimalRepository;
import uk.ac.osswatch.simal.rdf.SimalException;
import uk.ac.osswatch.simal.rdf.SimalRepositoryException;
import uk.ac.osswatch.simal.wicket.doap.ExhibitProjectBrowserPage;
import uk.ac.osswatch.simal.wicket.foaf.ExhibitPersonBrowserPage;
import uk.ac.osswatch.simal.wicket.tools.OhlohFormInputModel;
import uk.ac.osswatch.simal.wicket.widgets.Widget;
import uk.ac.osswatch.simal.wicket.widgets.WidgetInstance;
import uk.ac.osswatch.simal.wicket.widgets.WookieServerConnection;
import uk.ac.osswatch.simal.wicket.widgets.WookieWidgetGalleryPanel;
import uk.ac.osswatch.simal.wicket.widgets.WookieWidgetPanel;

/**
* The tools page provides access to a number of useful Admin tools.
*/
public class ToolsPage extends BasePage {
  private static final long serialVersionUID = -3723085497057001876L;
  private static final Logger logger = LoggerFactory.getLogger(ToolsPage.class);
  private static OhlohFormInputModel inputModel = new OhlohFormInputModel();

  private static Folder uploadFolder;

  public ToolsPage() {

    // Repository Stats
    try {
      add(new Label("numOfProjects", Integer.toString(UserApplication
          .getRepository().getAllProjects().size())));
      add(new Label("numOfPeople", Integer.toString(SimalRepositoryFactory
          .getPersonService().getAll().size())));
      add(new Label("numOfCategories", Integer.toString(SimalRepositoryFactory
          .getCategoryService().getAll().size())));
      add(new Label("numOfReviews", Integer.toString(SimalRepositoryFactory
          .getReviewService().getReviews().size())));
    } catch (SimalRepositoryException e) {
      UserReportableException error = new UserReportableException(
          "Unable to get repository statistics", ToolsPage.class, e);
      setResponsePage(new ErrorReportPage(error));
    }

    // Repository Config
    try {
      add(new Label("instanceID", SimalProperties
          .getProperty(SimalProperties.PROPERTY_SIMAL_INSTANCE_ID)));
      add(new Label("propertiesFile", SimalProperties.getLocalPropertiesFile()
          .toString()));
      add(new Label("repositoryLocation", JenaDatabaseSupport.getDatabasePath()));
      if (UserApplication.getScheduledPtswStatus()) {
        add(new Label("PTSWUpdaterStatus", "True"));
      } else {
        add(new Label("PTSWUpdaterStatus", "False"));
      }

      add(new Link<BasePage>("toggleImportPTSWLink") {

        private static final long serialVersionUID = -6938957715376331902L;

        public void onClick() {
          UserApplication.setScheduledPtswStatus(!UserApplication
              .getScheduledPtswStatus());
          setResponsePage(new ToolsPage());
        }
      });
    } catch (SimalRepositoryException e) {
      UserReportableException error = new UserReportableException(
          "Unable to get repository configuration data", ToolsPage.class, e);
      setResponsePage(new ErrorReportPage(error));
    }

    add(new Link<BasePage>("removeAllData") {

      private static final long serialVersionUID = 2038272881644442695L;

      public void onClick() {
        try {
          removeAllData();
          setResponsePage(new ToolsPage());
        } catch (UserReportableException e) {
          setResponsePage(new ErrorReportPage(e));
        }
      }
    });

    add(new Link<BasePage>("importTestData") {

      private static final long serialVersionUID = -7068358662054658988L;

      public void onClick() {
        try {
          importTestData();
          setResponsePage(new ToolsPage());
        } catch (UserReportableException e) {
          setResponsePage(new ErrorReportPage(e));
        }
      }
    });

    add(new BookmarkablePageLink<SettingsPage>("settingsPageLink",
        SettingsPage.class));
    add(new BookmarkablePageLink<SparqlQueryPage>("sparqlQueryPageLink",
        SparqlQueryPage.class));

    add(new ImportFromOhlohForm("importFromOhlohForm"));

    final PimsUploadForm pimsProgrammesUploadForm = new PimsUploadForm(
        "importProgrammesFromPimsForm", PimsUploadForm.PROGRAMMES);
    pimsProgrammesUploadForm.add(new UploadProgressBar("uploadProgress",
        pimsProgrammesUploadForm));
    add(pimsProgrammesUploadForm);

    final PimsUploadForm pimsProjectsUploadForm = new PimsUploadForm(
        "importProjectsFromPimsForm", PimsUploadForm.PROJECTS);
    pimsProjectsUploadForm.add(new UploadProgressBar("uploadProgress",
        pimsProjectsUploadForm));
    add(pimsProjectsUploadForm);

    final PimsUploadForm pimsProjectContactsUploadForm = new PimsUploadForm(
        "importProjectContactsFromPimsForm", PimsUploadForm.PROJECT_CONTACTS);
    pimsProjectContactsUploadForm.add(new UploadProgressBar("uploadProgress",
        pimsProjectContactsUploadForm));
    add(pimsProjectContactsUploadForm);

    add(new Link<BasePage>("importPTSWLink") {
      private static final long serialVersionUID = -6938957715376331902L;

      public void onClick() {
        try {
          importPTSW();
          setResponsePage(new ToolsPage());
        } catch (UserReportableException e) {
          setResponsePage(new ErrorReportPage(e));
        }
      }
    });

    // Browsing Tools
    add(new BookmarkablePageLink<ExhibitPersonBrowserPage>("exhibitPersonLink",
        ExhibitPersonBrowserPage.class));
    add(new BookmarkablePageLink<ExhibitPersonBrowserPage>(
        "exhibitProjectLink", ExhibitProjectBrowserPage.class));

    populateWookiePanel();
  }

  /**
   * Add Wookie widgets to the page if the server is available.
   */
  private void populateWookiePanel() {

    WookieServerConnection wookieServerConnection = UserApplication
        .getWookieServerConnection(true);
   
    // Trick to (re)connect to Wookie server in case it has
    // been (re)started after Simal's initial connection setup.
    if(!wookieServerConnection.isAvailable()) {
      wookieServerConnection.initialise();
    }

    // Show all widgets in a gallery
    try {
      add(new WookieWidgetGalleryPanel("widgetGallery"));
    } catch (SimalException e) {
      UserReportableException ure = new UserReportableException(
          "Unable to retrieve widgets from Woookie for Gallery",
          ToolsPage.class, e);
      setResponsePage(new ErrorReportPage(ure));
    }
    // all instantiated widgets
    try {
      RepeatingView repeating = new RepeatingView("instantiatedWidgets");
      Iterator<Widget> itr = wookieServerConnection.getAvailableWidgets()
          .values().iterator();
      Widget widget;
      while (itr.hasNext()) {
        widget = itr.next();
        Iterator<WidgetInstance> instances = widget.getInstances().iterator();
        while (instances.hasNext()) {
          WidgetInstance instance = instances.next();
          WebMarkupContainer item = new WebMarkupContainer(repeating
              .newChildId());
          repeating.add(item);
          item.add(new WookieWidgetPanel("instance", instance));
        }
      }
      add(repeating);
    } catch (SimalException e) {
      UserReportableException ure = new UserReportableException(
          "Unable to retrieve widgets from Woookie for Gallery",
          ToolsPage.class, e);
      setResponsePage(new ErrorReportPage(ure));
    }
  }

  /**
   * Remove all data from the repository.
   *
   * @throws UserReportableException
   */
  private void removeAllData() throws UserReportableException {
    ISimalRepository repo;

    logger.warn("Removing all data from the repository.");
   
    try {
      repo = UserApplication.getRepository();
    } catch (SimalRepositoryException e) {
      throw new UserReportableException("Unable to get the count of projects",
          ToolsPage.class, e);
    }
    repo.removeAllData();
  }

  private void importTestData() throws UserReportableException {
    ISimalRepository repo;

    logger.info("Importing the test data in the repository.");
   
    try {
      repo = UserApplication.getRepository();
    } catch (SimalRepositoryException e) {
      throw new UserReportableException("Unable to import test data",
          ToolsPage.class, e);
    }
    try {
      ModelSupport.addTestData(repo);
    } catch (Exception e) {
      throw new UserReportableException("Unable to add test data: "
          + e.getMessage(), ToolsPage.class);
    }
  }

  private void importPTSW() throws UserReportableException {
    PTSWImport importer = new PTSWImport();
    try {
      importer.importLatestDOAP();
    } catch (SimalRepositoryException e) {
      throw new UserReportableException(
          "Unable to import data into the repostory", ToolsPage.class, e);
    } catch (SimalException e) {
      throw new UserReportableException("Unable to import data from PTSW",
          ToolsPage.class, e);
    } catch (IOException e) {
      throw new UserReportableException("Unable to retrive data from PTSW",
          ToolsPage.class, e);
    }
  }

  private static class ImportFromOhlohForm extends Form<OhlohFormInputModel> {
    private static final long serialVersionUID = 4350446873545711199L;

    public ImportFromOhlohForm(String name) {
      super(name, new CompoundPropertyModel<OhlohFormInputModel>(inputModel));
      TextField<String> idField = new TextField<String>("projectID");
      add(idField);
      String[] defaultValue = { "" };
      idField.setModelValue(defaultValue);
    }

    @Override
    protected void onSubmit() {
      super.onSubmit();

      if (!this.hasError()) {
        try {
          Ohloh importer = new Ohloh();
          importer.addProjectToSimal(inputModel.getProjectID());
        } catch (ImportException e) {
          setResponsePage(new SettingsPage(SettingsPage.SET_OHLOH_API));
        } catch (SimalException e) {
          setResponsePage(new ErrorReportPage(new UserReportableException(
              "Unable to import from Ohloh", ToolsPage.class, e)));
        }
      }
    }
  }

  private static class PimsUploadForm extends Form<FileUploadField> {
    private static final long serialVersionUID = 1L;
    public static final int PROGRAMMES = 10;
    public static final int PROJECTS = 20;
    public static final int PROJECT_CONTACTS = 30;
    private FileUploadField fileUploadField;
    private int type;

    /**
     * Simple constructor.
     *
     * @param name
     *          Component name
     * @param i
     */
    public PimsUploadForm(String name, int type) {
      super(name);
      setMultiPart(true);
      add(fileUploadField = new FileUploadField("fileInput"));
      this.type = type;
    }

    /**
     * @see org.apache.wicket.markup.html.form.Form#onSubmit()
     */
    protected void onSubmit() {
      super.onSubmit();

      if (!this.hasError()) {
        final FileUpload upload = fileUploadField.getFileUpload();
        if (upload != null) {
          File newFile = new File(getUploadFolder(), upload.getClientFileName());

          if (newFile.exists() && !Files.remove(newFile)) {
            throw new IllegalStateException("Unable to overwrite "
                + newFile.getAbsolutePath());
          }

          try {
            boolean success = newFile.createNewFile();
            if (!success) {
              logger.warn("Trying ot create a file that already exists: "
                  + newFile);
            }
            upload.writeTo(newFile);
            logger.info("Uploaded PIMS export saved to "
                + upload.getClientFileName());
          } catch (IOException e) {
            throw new IllegalStateException("Unable to write file");
          }

          try {
            switch (type) {
            case PROGRAMMES:
              Pims.importProgrammes(newFile.toURI().toURL());
              break;
            case PROJECTS:
              Pims.importProjects(newFile.toURI().toURL());
              break;
            case PROJECT_CONTACTS:
              Pims.importProjectContacts(newFile.toURI().toURL());
              break;
            default:
              setResponsePage(new ErrorReportPage(new UserReportableException(
                  "Illegal type setting for PIMS uploader", ToolsPage.class)));
            }
            setResponsePage(new ToolsPage());
          } catch (FileNotFoundException e) {
            setResponsePage(new ErrorReportPage(new UserReportableException(
                "Cannot find PIMS data file to import", ToolsPage.class, e)));
          } catch (MalformedURLException e) {
            setResponsePage(new ErrorReportPage(new UserReportableException(
                "Cannot find PIMS data file to import", ToolsPage.class, e)));
          } catch (IOException e) {
            setResponsePage(new ErrorReportPage(new UserReportableException(
                "Cannot read PIMS data file to import", ToolsPage.class, e)));
          } catch (DuplicateURIException e) {
            setResponsePage(new ErrorReportPage(new UserReportableException(
                "Cannot import PIMS data file", ToolsPage.class, e)));
          } catch (SimalException e) {
            setResponsePage(new ErrorReportPage(new UserReportableException(
                "Cannot import PIMS data file", ToolsPage.class, e)));
          }
        } else {
          setResponsePage(new ErrorReportPage(new UserReportableException(
              "Must select a file to upload", ToolsPage.class)));
        }
      }
    }
  }

  private static Folder getUploadFolder() {
    if (uploadFolder == null) {
      uploadFolder = new Folder(System.getProperty("java.io.tmpdir"),
          "wicket-uploads");
      boolean created = uploadFolder.mkdirs();
      if (!created && !uploadFolder.exists()) {
        throw new IllegalStateException("Unable to create " + uploadFolder);
      }
       
    }
    return uploadFolder;
  }

}
TOP

Related Classes of uk.ac.osswatch.simal.wicket.ToolsPage$ImportFromOhlohForm

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.