/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/osp/trunk/matrix/tool/src/java/org/theospi/portfolio/matrix/control/PrettyScaffoldingController.java $ * $Id: PrettyScaffoldingController.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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 org.theospi.portfolio.matrix.control; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.content.api.ContentHostingService; import org.sakaiproject.entity.api.EntityManager; import org.sakaiproject.metaobj.security.AuthenticationManager; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.utils.mvc.intf.FormController; import org.sakaiproject.metaobj.utils.mvc.intf.LoadObjectController; import org.sakaiproject.metaobj.worksite.mgt.WorksiteManager; import org.sakaiproject.tool.api.SessionManager; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; import org.theospi.portfolio.matrix.model.Criterion; import org.theospi.portfolio.matrix.model.Level; import org.theospi.portfolio.matrix.model.Scaffolding; import org.theospi.portfolio.matrix.model.ScaffoldingCell; import org.theospi.portfolio.matrix.model.Matrix; import org.theospi.portfolio.matrix.model.WizardPage; import org.theospi.portfolio.matrix.model.Cell; import org.theospi.portfolio.review.mgt.ReviewManager; /** * @author chmaurer */ public class PrettyScaffoldingController extends BaseScaffoldingController implements FormController, LoadObjectController { protected final Log logger = LogFactory.getLog(getClass()); private WorksiteManager worksiteManager = null; private AuthenticationManager authManager = null; private SessionManager sessionManager; private ContentHostingService contentHosting; private EntityManager entityManager; private ReviewManager reviewManager; /* (non-Javadoc) * @see org.theospi.utils.mvc.intf.FormController#referenceData(java.util.Map, java.lang.Object, org.springframework.validation.Errors) */ public Map referenceData(Map request, Object command, Errors errors) { Map<String, Object> model = new HashMap<String, Object>(); model.put("isInSession", EditedScaffoldingStorage.STORED_SCAFFOLDING_FLAG); Scaffolding scaffolding = null; if ( command instanceof Scaffolding ) scaffolding = (Scaffolding)command; if ( scaffolding != null ) model.put("isMatrixUsed", scaffolding.isPublished() && getMatrixManager().isScaffoldingUsed( scaffolding ) ); else model.put("isMatrixUsed", false ); return model; } /* (non-Javadoc) * @see org.theospi.utils.mvc.intf.LoadObjectController#fillBackingObject(java.lang.Object, java.util.Map, java.util.Map, java.util.Map) */ public Object fillBackingObject(Object incomingModel, Map request, Map session, Map application) throws Exception { MatrixGridBean grid = (MatrixGridBean)incomingModel; Id sId = getIdManager().getId((String)request.get("scaffolding_id")); Scaffolding scaffolding = getMatrixManager().getScaffolding(sId); List levels = scaffolding.getLevels(); List criteria = scaffolding.getCriteria(); List<List> matrixContents = new ArrayList<List>(); Criterion criterion = new Criterion(); Level level = new Level(); List<ScaffoldingCell> row = new ArrayList<ScaffoldingCell>(); Set cells = scaffolding.getScaffoldingCells(); for (Iterator criteriaIterator = criteria.iterator(); criteriaIterator.hasNext();) { row.clear(); // = new ArrayList<ScaffoldingCell>(); criterion = (Criterion) criteriaIterator.next(); for (Iterator levelsIterator = levels.iterator(); levelsIterator.hasNext();) { level = (Level) levelsIterator.next(); ScaffoldingCell scaffoldingCell = getScaffoldingCell(cells, criterion, level); row.add(scaffoldingCell); } matrixContents.add(row); } grid.setScaffolding(scaffolding); grid.setColumnLabels(levels); grid.setRowLabels(criteria); grid.setMatrixContents(matrixContents); //Make sure these are not in session. session.remove(EditedScaffoldingStorage.STORED_SCAFFOLDING_FLAG); session.remove(EditedScaffoldingStorage.EDITED_SCAFFOLDING_STORAGE_SESSION_KEY); return incomingModel; } private ScaffoldingCell getScaffoldingCell(Set cells, Criterion criterion, Level level) { for (Iterator iter=cells.iterator(); iter.hasNext();) { ScaffoldingCell scaffoldingCell = (ScaffoldingCell) iter.next(); if (scaffoldingCell.getRootCriterion().getId().getValue().equals(criterion.getId().getValue()) && scaffoldingCell.getLevel().getId().getValue().equals(level.getId().getValue())) { return scaffoldingCell; } } return null; } /* (non-Javadoc) * @see org.theospi.utils.mvc.intf.Controller#handleRequest(java.lang.Object, java.util.Map, java.util.Map, java.util.Map, org.springframework.validation.Errors) */ public ModelAndView handleRequest(Object requestModel, Map request, Map session, Map application, Errors errors) { String action = (String) request.get("action"); if (action == null) action = (String) request.get("submitAction"); String generateAction = (String)request.get("generateAction"); String cancelAction = (String)request.get("cancelAction"); Id worksiteId = worksiteManager.getCurrentWorksiteId(); Map<String, Object> model = new HashMap<String, Object>(); EditedScaffoldingStorage sessionBean = (EditedScaffoldingStorage)session.get( EditedScaffoldingStorage.EDITED_SCAFFOLDING_STORAGE_SESSION_KEY); Scaffolding scaffolding = sessionBean.getScaffolding(); scaffolding.setWorksiteId(worksiteId); scaffolding.setOwner(authManager.getAgent()); if (generateAction != null) { if (scaffolding.isPublished()) { return new ModelAndView("editScaffoldingConfirm"); } scaffolding = saveScaffolding(scaffolding); session.remove(EditedScaffoldingStorage.STORED_SCAFFOLDING_FLAG); session.remove(EditedScaffoldingStorage.EDITED_SCAFFOLDING_STORAGE_SESSION_KEY); model.put("scaffolding_id", scaffolding.getId()); return new ModelAndView("view", model); } if (cancelAction != null) { return new ModelAndView("return"); } if (action != null) { if (action.equals("forward")) { String forwardView = (String)request.get("dest"); model.put("label", request.get("label")); model.put("finalDest", request.get("finalDest")); model.put("displayText", request.get("displayText")); String params = (String)request.get("params"); model.put("params", params); if (!params.equals("")) { String[] paramsList = params.split(":"); for (int i=0; i<paramsList.length; i++) { String[] pair = paramsList[i].split("="); String val = null; if (pair.length>1) val = pair[1]; model.put(pair[0], val); } } //matrixManager.storeScaffolding(scaffolding); //touchAllCells(scaffolding); sessionBean.setScaffolding(scaffolding); model.put("scaffolding_id", scaffolding.getId()); return new ModelAndView(forwardView, model); } } return new ModelAndView("success"); } /* private void touchAllScaffolding(Scaffolding scaffolding) { scaffolding.getLevels().size(); scaffolding.getCriteria().size(); for (Iterator iter = scaffolding.getScaffoldingCells().iterator(); iter.hasNext();) { ScaffoldingCell sCell = (ScaffoldingCell) iter.next(); sCell.getCells().size(); //sCell.getExpectations().size(); } } */ protected void touchAllCells(Scaffolding scaffolding) { for (Iterator iter = scaffolding.getScaffoldingCells().iterator(); iter.hasNext();) { ScaffoldingCell sCell = (ScaffoldingCell) iter.next(); sCell.getCells().size(); } } /** * @return Returns the worksiteManager. */ public WorksiteManager getWorksiteManager() { return worksiteManager; } /** * @param worksiteManager The worksiteManager to set. */ public void setWorksiteManager(WorksiteManager worksiteManager) { this.worksiteManager = worksiteManager; } /** * @return Returns the authManager. */ public AuthenticationManager getAuthManager() { return authManager; } /** * @param authManager The authManager to set. */ public void setAuthManager(AuthenticationManager authManager) { this.authManager = authManager; } public SessionManager getSessionManager() { return sessionManager; } public void setSessionManager(SessionManager sessionManager) { this.sessionManager = sessionManager; } public ContentHostingService getContentHosting() { return contentHosting; } public void setContentHosting(ContentHostingService contentHosting) { this.contentHosting = contentHosting; } public EntityManager getEntityManager() { return entityManager; } public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } /** * @return Returns the reviewManager. */ public ReviewManager getReviewManager() { return reviewManager; } /** * @param reviewManager The reviewManager to set. */ public void setReviewManager(ReviewManager reviewManager) { this.reviewManager = reviewManager; } }