001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.uif.view; 017 018 import java.util.List; 019 020 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute; 021 import org.kuali.rice.krad.uif.component.Component; 022 import org.kuali.rice.krad.uif.element.Iframe; 023 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle; 024 import org.kuali.rice.krad.uif.util.ComponentFactory; 025 import org.kuali.rice.krad.uif.util.LifecycleElement; 026 import org.kuali.rice.krad.uif.util.UrlInfo; 027 028 /** 029 * IframeView is a View component that shows another website's content in an iframe. 030 * 031 * <p>This View will always have one page itself and will always contain an iframe component. The location 032 * property allows ease of setting the url for the iframe. If the site being shown in the iframe is a KRAD View 033 * itself, the default bean for this class will attempt to pass a url parameter notifying the View that it is being 034 * shown in an iframe; this can be used in SpringEL to invoke special logic (such as not rendering some components, 035 * like the app header)</p> 036 */ 037 public class IframeView extends FormView { 038 private UrlInfo location; 039 private Iframe iframe; 040 041 /** 042 * Forces this view to be only one page, and sets the iframe as one of its items 043 * 044 * {@inheritDoc} 045 */ 046 @Override 047 public void performInitialization(Object model) { 048 super.performInitialization(model); 049 050 super.setSinglePageView(true); 051 052 List<Component> modifiedItems = (List<Component>) this.getPage().getItems(); 053 modifiedItems.add(iframe); 054 this.getPage().setItems(modifiedItems); 055 } 056 057 /** 058 * Evaluates expressions that may appear in location properties and sets the source of iframe automatically 059 * 060 * {@inheritDoc} 061 */ 062 @Override 063 public void performApplyModel(Object model, LifecycleElement parent) { 064 super.performApplyModel(model, parent); 065 066 if (location != null) { 067 ViewLifecycle.getExpressionEvaluator().populatePropertyExpressionsFromGraph(location, false); 068 ViewLifecycle.getExpressionEvaluator().evaluateExpressionsOnConfigurable(this, location, this.getContext()); 069 070 iframe.setSource(location.getHref()); 071 } 072 } 073 074 /** 075 * Get the url object representing the location 076 * 077 * @return the url location object 078 */ 079 @BeanTagAttribute(name = "location", type = BeanTagAttribute.AttributeType.SINGLEBEAN) 080 public UrlInfo getLocation() { 081 return location; 082 } 083 084 /** 085 * @see org.kuali.rice.krad.uif.view.IframeView#getLocation() 086 */ 087 public void setLocation(UrlInfo location) { 088 this.location = location; 089 } 090 091 /** 092 * Convenience setter for setting the href (full URL) of the location object 093 * 094 * @param href URL for location option 095 */ 096 public void setHref(String href) { 097 if (this.location == null) { 098 this.location = ComponentFactory.getUrlInfo(); 099 } 100 101 this.location.setHref(href); 102 } 103 104 /** 105 * The iframe component to be used as the content of this view, nothing needs to be set on this directly if 106 * using the default bean for this View 107 * 108 * @return the iframe component 109 */ 110 public Iframe getIframe() { 111 return iframe; 112 } 113 114 /** 115 * @see org.kuali.rice.krad.uif.view.IframeView#getIframe() 116 */ 117 public void setIframe(Iframe iframe) { 118 this.iframe = iframe; 119 } 120 }