| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF 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 org.apache.oodt.cas.webcomponents.workflow.model; |
| |
| import org.apache.oodt.cas.webcomponents.workflow.WorkflowMgrConn; |
| import org.apache.oodt.cas.workflow.structs.Workflow; |
| import org.apache.oodt.cas.workflow.structs.WorkflowTask; |
| import org.apache.wicket.PageParameters; |
| import org.apache.wicket.behavior.SimpleAttributeModifier; |
| import org.apache.wicket.markup.html.WebMarkupContainer; |
| import org.apache.wicket.markup.html.WebPage; |
| import org.apache.wicket.markup.html.basic.Label; |
| import org.apache.wicket.markup.html.link.Link; |
| import org.apache.wicket.markup.html.list.ListItem; |
| import org.apache.wicket.markup.html.list.ListView; |
| import org.apache.wicket.markup.html.panel.Panel; |
| import org.apache.wicket.model.IModel; |
| import org.apache.wicket.model.LoadableDetachableModel; |
| import org.apache.wicket.model.PropertyModel; |
| import org.apache.wicket.model.util.ListModel; |
| |
| /** |
| * |
| * Describe your class here. |
| * |
| * @author mattmann |
| * @version $Revision$ |
| * |
| */ |
| public class WorkflowViewer extends Panel { |
| |
| private static final long serialVersionUID = -157601650785829792L; |
| |
| private final WorkflowMgrConn wm; |
| |
| public WorkflowViewer(String id, String wmUrlStr, final String workflowId, |
| final Class<? extends WebPage> taskPage) { |
| super(id); |
| this.wm = new WorkflowMgrConn(wmUrlStr); |
| final IModel<Workflow> wModel = new LoadableDetachableModel<Workflow>() { |
| |
| @Override |
| protected Workflow load() { |
| return wm.safeGetWorkflowById(workflowId); |
| } |
| }; |
| |
| add(new Label("workflow_id", new PropertyModel<Workflow>(wModel, "id"))); |
| add(new Label("workflow_name", new PropertyModel<Workflow>(wModel, "name"))); |
| |
| int numTasks = wModel.getObject().getTasks().size(); |
| String width = String.valueOf((82 * numTasks) + (115 * (numTasks - 1))); |
| String height = "82"; |
| WebMarkupContainer wTable = new WebMarkupContainer("workflow_model_tbl"); |
| wTable.add(new SimpleAttributeModifier("width", width)); |
| wTable.add(new SimpleAttributeModifier("height", height)); |
| |
| wTable.add(new ListView<WorkflowTask>("tasks", new ListModel<WorkflowTask>( |
| wModel.getObject().getTasks())) { |
| |
| @Override |
| protected void populateItem(ListItem<WorkflowTask> item) { |
| final PageParameters params = new PageParameters(); |
| params.add("id", item.getModelObject().getTaskId()); |
| Link taskLink = new Link("task_link") { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.wicket.markup.html.link.Link#onClick() |
| */ |
| @Override |
| public void onClick() { |
| setResponsePage(taskPage, params); |
| } |
| }; |
| String taskName = summarizeWords(item.getModelObject().getTaskName(), |
| 16, 16); |
| taskLink.add(new Label("task_name", taskName).setRenderBodyOnly(true)); |
| item.add(taskLink); |
| |
| if (item.getIndex() == wModel.getObject().getTasks().size() - 1) { |
| item.add(new WebMarkupContainer("task_arrow").setVisible(false)); |
| } else { |
| item.add(new WebMarkupContainer("task_arrow")); |
| } |
| |
| } |
| }); |
| add(wTable); |
| |
| } |
| |
| /** |
| * <p> |
| * Summarizes a given String of words (the <code>orig</code> parameter), and |
| * limits the size of the individual words in the string by the given |
| * <code>wordThreshold</code>, and limits the final size of the final |
| * summarized word string by the given <code>maxLengthTotal</code>. |
| * </p> |
| * |
| * @param orig |
| * The original String to summarize. |
| * @param wordThreshhold |
| * The maximum amount of characters for any given word in the string. |
| * @param maxLengthTotal |
| * The maximum final size of the summarized set of words. |
| * @return A summarized string. |
| */ |
| private String summarizeWords(String orig, int wordThreshhold, |
| int maxLengthTotal) { |
| String[] words = orig.split(" "); |
| StringBuffer summarizedString = new StringBuffer(); |
| |
| for (int i = 0; i < words.length; i++) { |
| String word = words[i]; |
| summarizedString.append(word.substring(0, Math.min(wordThreshhold, word |
| .length()))); |
| summarizedString.append(" "); |
| } |
| |
| // add '...' to end of summarized string if applicable |
| if (summarizedString.length() > maxLengthTotal) { |
| return summarizedString.substring(0, |
| Math.min(maxLengthTotal, summarizedString.length()) - 3).toString() + "..."; |
| } else |
| return summarizedString.toString(); |
| } |
| |
| } |