Package uk.ac.osswatch.simal.wicket.panel

Source Code of uk.ac.osswatch.simal.wicket.panel.PersonSummaryPanel$LoadableDetachableInternetAddressModel

package uk.ac.osswatch.simal.wicket.panel;

/*
* 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.util.List;
import java.util.Vector;

import org.apache.wicket.Page;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.link.PageLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import uk.ac.osswatch.simal.SimalProperties;
import uk.ac.osswatch.simal.model.IDocument;
import uk.ac.osswatch.simal.model.IInternetAddress;
import uk.ac.osswatch.simal.model.IPerson;
import uk.ac.osswatch.simal.model.IProject;
import uk.ac.osswatch.simal.rdf.SimalRepositoryException;
import uk.ac.osswatch.simal.wicket.ErrorReportPage;
import uk.ac.osswatch.simal.wicket.UserHomePage;
import uk.ac.osswatch.simal.wicket.UserReportableException;
import uk.ac.osswatch.simal.wicket.doap.ProjectDetailPage;
import uk.ac.osswatch.simal.wicket.foaf.PersonDetailPage;
import uk.ac.osswatch.simal.wicket.markup.html.list.InternetAddressListView;
import uk.ac.osswatch.simal.wicket.markup.html.list.WebPageListView;

/**
* A panel for displaying project information.
*/
public class PersonSummaryPanel extends Panel {
  private static final long serialVersionUID = -6078043900380156791L;
  private static final Logger logger = LoggerFactory
      .getLogger(PersonSummaryPanel.class);
  private IPerson person;

  /**
   * Create a summary page for a specific person.
   *
   * @param panelID
   * @param person
   *          the person to display in this panel
   * @throws SimalRepositoryException
   */
  public PersonSummaryPanel(String panelId, IPerson person)
      throws SimalRepositoryException {
    super(panelId);
    populatePage(person);
  }

  private void populatePage(final IPerson person)
      throws SimalRepositoryException {
    this.person = person;
    PageLink detailLink = new PageLink("detailLink", PersonDetailPage
        .getLink(person));
    detailLink.add(new Label("personName", person.getLabel()));
    add(detailLink);

    InternetAddressListView emailListView = new InternetAddressListView(
        "emailList", new LoadableDetachableInternetAddressModel(person));
    add(emailListView);

    WebPageListView homepageListView = new WebPageListView("webpageList",
        new LoadableDetachableHomePageModel(person));
    add(homepageListView);

    String friendsURL = SimalProperties
        .getProperty(SimalProperties.PROPERTY_REST_BASEURL)
        + "/allColleagues/person-" + person.getSimalID() + "/xml";
    add(new ExternalLink("friendsLink", friendsURL));

    add(new Link("removePersonActionLink") {
      private static final long serialVersionUID = -5596547501782436339L;

      public void onClick() {
        try {
          removePerson();
          if (this.getPage() instanceof ProjectDetailPage) {
            setResponsePage(new ProjectDetailPage(((ProjectDetailPage) this
                .getPage()).getProject()));
          } else {
            logger
                .warn("Removing person from an unknown page, returning to user home page");
            setResponsePage(new UserHomePage());
          }
        } catch (UserReportableException e) {
          setResponsePage(new ErrorReportPage(e));
        }
      }
    });
  }

  private void removePerson() throws UserReportableException {
    Page page = this.getPage();
    if (page instanceof ProjectDetailPage) {
      IProject project = ((ProjectDetailPage) page).getProject();
      try {
        project.removeDocumenter(person);
        project.removeDeveloper(person);
        project.removeHelper(person);
        project.removeMaintainer(person);
        project.removeTester(person);
        project.removeTranslator(person);
      } catch (SimalRepositoryException e) {
        throw new UserReportableException("Unable to removePerson",
            PersonSummaryPanel.class, e);
      }
    } else {
      throw new UserReportableException(
          "Unable to removePerson when parent page is type "
              + page.getClass().getName(), PersonSummaryPanel.class);
    }
  }

  private static class LoadableDetachableInternetAddressModel extends
      LoadableDetachableModel<List<IInternetAddress>> {
    private static final long serialVersionUID = 1L;
    private IPerson person;

    public LoadableDetachableInternetAddressModel(IPerson person) {
      this.person = person;
    }

    protected List<IInternetAddress> load() {
      return new Vector<IInternetAddress>(person.getEmail());
    }
  }

  private static class LoadableDetachableHomePageModel extends
      LoadableDetachableModel<List<IDocument>> {
    private static final long serialVersionUID = 1L;
    private IPerson person;

    public LoadableDetachableHomePageModel(IPerson person) {
      this.person = person;
    }

    protected List<IDocument> load() {
      return new Vector<IDocument>(person.getHomepages());
    }
  }

}
TOP

Related Classes of uk.ac.osswatch.simal.wicket.panel.PersonSummaryPanel$LoadableDetachableInternetAddressModel

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.