Package com.esri.gpt.control.harvest

Source Code of com.esri.gpt.control.harvest.HarvestHistoryController

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You 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.
*/
package com.esri.gpt.control.harvest;

import com.esri.gpt.catalog.harvest.history.HeActionCriteria;
import com.esri.gpt.catalog.harvest.history.HeCriteria;
import com.esri.gpt.catalog.harvest.history.HeDeleteRequest;
import com.esri.gpt.catalog.harvest.history.HeRecord;
import com.esri.gpt.catalog.harvest.history.HeRecords;
import com.esri.gpt.catalog.harvest.history.HeResult;
import com.esri.gpt.catalog.harvest.history.HeSelectOneRequest;
import com.esri.gpt.catalog.harvest.history.HeSelectRequest;
import com.esri.gpt.catalog.harvest.repository.HrRecord;
import com.esri.gpt.catalog.harvest.repository.HrRecords;
import com.esri.gpt.catalog.harvest.repository.HrSelectRequest;
import com.esri.gpt.control.view.BaseSortDirectionStyleMap;
import com.esri.gpt.control.view.SortDirectionStyle;
import com.esri.gpt.framework.collection.StringSet;
import com.esri.gpt.framework.context.ApplicationException;
import com.esri.gpt.framework.context.RequestContext;
import com.esri.gpt.framework.request.SortOption;
import com.esri.gpt.framework.security.identity.NotAuthorizedException;
import com.esri.gpt.framework.util.UuidUtil;
import com.esri.gpt.framework.util.Val;
import java.util.logging.Level;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;

/**
* Harvest history controller.
* Provides functionality to support *.jsp pages to display harvest history and
* view harvest reports.
*/
public class HarvestHistoryController extends BaseHarvestController {

// class variables =============================================================
/** action expression */
private static final String ACTION_EXPRESSION =
  "#{HarvestHistoryController.handleListOfEvents}";
/** change expression */
private static final String CHANGE_EXPRESSION =
  "#{HarvestHistoryController.pageCursorPanel.onChange}";

// instance variables ==========================================================
/** History result. */
private HeResult _result = new HeResult();
/** Harvest viewer viewer. */
private ReportViewer _reportViewer = new ReportViewer();
/** Sort direction style map. */
private BaseSortDirectionStyleMap _sortDirectionStyleMap =
  new SortDirectionStyleMapImpl();
/** flag to indicate if is this external call request */
private boolean external = false;

// constructors ================================================================
/**
* Creates instance of the controller.
*/
public HarvestHistoryController() {
  super(ACTION_EXPRESSION, CHANGE_EXPRESSION);
  _pageCursorPanel.setPageCursor(getResult().getQueryResult().getPageCursor());
}
// properties ==================================================================
/**
* Gets harvest history criteria.
* @return harvest history criteria
*/
public HeCriteria getCriteria() {
  return getHarvestContext().getHistoryCriteria();
}

/**
* Sets harvest history criteria.
* @param historyCriteria harvest history criteria
*/
public void setCriteria(HeCriteria historyCriteria) {
  getHarvestContext().setHistoryCriteria(historyCriteria);
}

/**
* Gets harvest history result.
* @return harvest history result
*/
public HeResult getResult() {
  return _result;
}

/**
* Sets harvest history result.
* @param historyResult harvest history result
*/
public void setResult(HeResult historyResult) {
  _result = historyResult != null ? historyResult : new HeResult();
}

/**
* Gets viewer viewer.
* @return viewer viewer
*/
public ReportViewer getReportViewer() {
  return _reportViewer;
}

/**
* Sets viewer viewer.
* @param viewer viewer viewer
*/
/* default */ void setReportViewer(ReportViewer viewer) {
  _reportViewer = viewer;
}

/**
* Gets sort direction style map.
* @return sort direction style map
*/
public BaseSortDirectionStyleMap getSortDirectionStyleMap() {
  return _sortDirectionStyleMap;
}

/**
* Gets sort direction style.
* @return sort direction style
*/
public SortDirectionStyle getSortDirectionStyle() {
  return getSortDirectionStyleMap().getStyle();
}

/**
* Sets sort direction style.
* @param style sort direction style
*/
public void setSortDirectionStyle(SortDirectionStyle style) {
  getSortDirectionStyleMap().setStyle(style);
}

/**
* Gets always false.
* @return <code>false</code>
*/
public boolean getAlwaysFalse() {
  return false;
}

/**
* Sets always false.
* @param ignored ignored parameter
*/
public void setAlwaysFalse(boolean ignored) {

}

/**
* Gets information if it's external call.
* @return <code>true</code> if it's external call
*/
public boolean getExternal() {
  return external;
}

/**
* Sets information if it's external call.
* @param external <code>true</code> if it's external call
*/
public void setExternal(boolean external) {
  this.external = external;
}
// methods =====================================================================
/**
* Called to handle history event.
* <p/>
* Reads sort columna and sort direction and stores within query criteria
* object.
* @param event the associated JSF action event
* @throws AbortProcessingException if processing should be aborted
* @see HarvestContext
*/
public void handleListOfEvents(ActionEvent event) {
  try {
    // start execution phase
    RequestContext context = onExecutionPhaseStarted();

    // check authorization
    authorizeAction(context);

    // check for a page cursor navigation event
    getPageCursorPanel().checkActionEvent(event, true);

    UIComponent component = event.getComponent();
    String sCommand =
      Val.chkStr((String) component.getAttributes().get("command"));
    if (sCommand.equalsIgnoreCase("sort")) {
      String sCol = (String) component.getAttributes().get("column");
      String sDir = (String) component.getAttributes().get("defaultDirection");
      String sCurrCol =
        getCriteria().getQueryCriteria().getSortOption().getColumnKey();
      if (sCol.equalsIgnoreCase(sCurrCol)) {
        switch (SortOption.SortDirection.checkValue(sDir)) {
          case asc:
            sDir = SortOption.SortDirection.desc.name().toLowerCase();
            break;
          case desc:
            sDir = SortOption.SortDirection.asc.name().toLowerCase();
            break;
        }
      }
      getCriteria().getQueryCriteria().
        getSortOption().setColumnKey(sCol, true, sDir);
    }
  } catch (AbortProcessingException e) {
    throw (e);
  } catch (Throwable t) {
    handleException(t);
  } finally {
    onExecutionPhaseCompleted();
  }
}

/**
* Prepares page to display harvest history.
* @return empty string
*/
public String getListEventsView() {

  try {
    // start view preparation phase
    RequestContext context = onPrepareViewStarted();

    // check authorization
    authorizeAction(context);

    // prepare action criteria
    if (getCriteria().getActionCriteria().getAction() ==
      HeActionCriteria.HistoryAction.Unknown) {
      getCriteria().getActionCriteria().setAction(
        HeActionCriteria.HistoryAction.ViewReport);
    }

    // get uuid of repository record
    String uuid = getCriteria().getActionCriteria().getUuid();
    if (!UuidUtil.isUuid(uuid)) {
      throw new ApplicationException();
    }

    // select and read repository record
    HrSelectRequest selectRepositoryRequest =
      new HrSelectRequest(context, uuid);
    selectRepositoryRequest.execute();
    HrRecords records = selectRepositoryRequest.getQueryResult().getRecords();

    // get harvest repository record
    HrRecord record = records.size() == 1 ? records.get(0) : null;
    if (record == null) {
      throw new ApplicationException();
    }

    // select and read harvest event record
    HeSelectRequest selectRequest =
      new HeSelectRequest(context, record, getCriteria(), getResult());
    selectRequest.execute();

    getResult().getQueryResult().setUuid(record.getUuid());
    getResult().getQueryResult().setProtocolTypeAsString(record.getProtocol().getKind());
    getResult().getQueryResult().setName(record.getName());
    getResult().getQueryResult().setUrl(record.getHostUrl());
    getResult().getQueryResult().setReportUuid("");

  } catch (NotAuthorizedException e) {
    try {
      ExternalContext ec = getContextBroker().getExternalContext();
      ec.redirect(Val.chkStr(ec.getRequestContextPath())+"/catalog/main/home.page");
    } catch (Throwable t) {
      getLogger().log(Level.SEVERE,"Exception raised.",t);
    }
  } catch (Throwable t) {
    handleException(t);
  } finally {
    onPrepareViewCompleted();
  }

  return "";
}

/**
* Does post preparation of the list of events.
* @return empty string
*/
public String getListEventsPostView() {
  // build the UI components associated with the PageCursorPanel
  getPageCursorPanel().setPageCursor(
    getResult().getQueryResult().getPageCursor());
  return "";
}

/**
* Prepares harvest report page.
* @return empty string
*/
public String getViewReportView() {

  try {
    // start view preparation phase
    RequestContext context = onPrepareViewStarted();
    getReportViewer().setRequestContext(context);
    getReportViewer().setMsgBroker(extractMessageBroker());
    getReportViewer().setRecord(new HeRecord(new HrRecord()));

    String uuid = context.getServletRequest().getParameter("uuid");
    if (UuidUtil.isUuid(uuid)) {
      getCriteria().getActionCriteria().setEventUuid(uuid);
      setExternal(true);
    } else {
      // check authorization
      authorizeAction(context);
    }

    String sEventUuid = getCriteria().getActionCriteria().getEventUuid();

    // get uuid of harvest event uuid
    if (!UuidUtil.isUuid(sEventUuid)) {
      throw new ApplicationException();
    }

    // select and read harvest event record
    HeSelectOneRequest selectEventReq =
      new HeSelectOneRequest(context, sEventUuid);
    selectEventReq.execute();
    HeRecords events = selectEventReq.getQueryResult().getRecords();

    // get harvest event record
    HeRecord event = events.size() == 1 ? events.get(0) : null;
    if (event == null) {
      throw new ApplicationException("No requested event found.");
    }

    HrRecord repository = event.getRepository();

    getResult().getQueryResult().setUuid(repository.getUuid());
    getResult().getQueryResult().setProtocolTypeAsString(repository.getProtocol().getKind());
    getResult().getQueryResult().setName(repository.getName());
    getResult().getQueryResult().setUrl(repository.getHostUrl());
    getResult().getQueryResult().setReportUuid(event.getUuid());

    getReportViewer().setRecord(event);

  } catch (NotAuthorizedException e) {
    try {
      ExternalContext ec = getContextBroker().getExternalContext();
      ec.redirect(Val.chkStr(ec.getRequestContextPath())+"/catalog/main/home.page");
    } catch (Throwable t) {
      getLogger().log(Level.SEVERE,"Exception raised.",t);
    }
  } catch (Throwable t) {
    handleException(t);
  } finally {
    onPrepareViewCompleted();
  }

  return "";
}

/**
* History report execute button action.
* @return navigation outcome
*/
public String onClickButtonHistoryExecuteAction() {
  try {
    // start execution phase
    RequestContext context = onExecutionPhaseStarted();

    // check authorization
    authorizeAction(context);

    // get action
    HeActionCriteria.HistoryAction action =
      getCriteria().getActionCriteria().getAction();

    StringSet uuids =
      getCriteria().getActionCriteria().getSelectedRecordIdSet();

    String[] aUuids = uuids.toArray(new String[uuids.size()]);

    switch (action) {
      case ViewReport:
        if (aUuids.length == 1) {
          getCriteria().getActionCriteria().setEventUuid(aUuids[0]);
          return "catalog.harvest.manage.report";
        } else {
          extractMessageBroker().addErrorMessage(
            "catalog.harvest.history.manage.message.err.selection");
        }
        break;
      case Delete:
        HeDeleteRequest request = new HeDeleteRequest(context, aUuids);
        request.execute();
        int nRecordsDeleted =
          request.getActionResult().getNumberOfRecordsModified();
        if (aUuids.length > 0) {
          extractMessageBroker().addSuccessMessage(
            "catalog.harvest.manage.history.message.deleted",
            new Object[]{
            Integer.toString(nRecordsDeleted),
            Integer.toString(aUuids.length)
          });
        } else {
          extractMessageBroker().addErrorMessage(
            "catalog.harvest.history.manage.message.err.atLeast");
        }
        break;
    }

  } catch (Throwable t) {
    handleException(t);
  } finally {
    onExecutionPhaseCompleted();
  }

  return "";
}

// types =======================================================================
/**
* Custom implementation of SortDirectionStyleMap.
*/
private class SortDirectionStyleMapImpl extends BaseSortDirectionStyleMap {

/**
* Gets sort option.
* @return sort option
*/
@Override
public SortOption getSortOption() {
  return getCriteria().getQueryCriteria().getSortOption();
}
}
}
TOP

Related Classes of com.esri.gpt.control.harvest.HarvestHistoryController

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.