1 21 package com.jaspersoft.jasperserver.war.action; 22 23 import java.util.ArrayList ; 24 import java.util.List ; 25 26 import org.apache.commons.logging.Log; 27 import org.apache.commons.logging.LogFactory; 28 import org.springframework.webflow.action.FormAction; 29 import org.springframework.webflow.RequestContext; 30 import org.springframework.webflow.ScopeType; 31 import org.springframework.webflow.Event; 32 import org.springframework.webflow.AttributeMap; 33 import org.springframework.validation.DataBinder; 34 import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor; 35 36 import com.jaspersoft.jasperserver.api.metadata.common.domain.Resource; 37 import com.jaspersoft.jasperserver.api.metadata.common.domain.ResourceLookup; 38 import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService; 39 import com.jaspersoft.jasperserver.api.metadata.olap.domain.MondrianConnection; 40 import com.jaspersoft.jasperserver.api.metadata.olap.domain.MondrianXMLADefinition; 41 import com.jaspersoft.jasperserver.api.metadata.olap.domain.OlapClientConnection; 42 import com.jaspersoft.jasperserver.api.metadata.olap.service.OlapConnectionService; 43 import com.jaspersoft.jasperserver.api.metadata.view.domain.FilterCriteria; 44 import com.jaspersoft.jasperserver.api.common.domain.impl.ExecutionContextImpl; 45 import com.jaspersoft.jasperserver.war.validation.MondrianXmlaSourceValidator; 46 import com.jaspersoft.jasperserver.war.dto.BaseDTO; 47 import com.jaspersoft.jasperserver.war.dto.MondrianXmlaSourceWrapper; 48 49 55 public class EditMondrianXmlaSourceAction extends FormAction { 56 public final Log log = LogFactory.getLog(this.getClass()); 57 private static final String FORM_OBJECT_KEY = "mondrianXmlaSource"; 58 private static final String PARENT_FOLDER_ATTR = "parentFolder"; 59 private static final String CURRENT_MONDRIAN_XMLA_DEFINITION_ATTR = "currentMondrianXmlaDefinition"; 60 private static final String IS_EDIT = "isEdit"; private RepositoryService repository; 62 private OlapConnectionService connectionService; 63 64 67 public EditMondrianXmlaSourceAction() { 68 setFormObjectClass(MondrianXmlaSourceWrapper.class); 69 setFormObjectName(FORM_OBJECT_KEY); 70 setFormObjectScope(ScopeType.FLOW); 71 setValidator(new MondrianXmlaSourceValidator()); 72 } 73 74 80 public Object loadFormObject(RequestContext context) { 81 MondrianXMLADefinition mondrianXmlaDefinition; 82 MondrianXmlaSourceWrapper wrapper; 83 ExecutionContextImpl executionContext = new ExecutionContextImpl(); 84 if (context.getFlowScope().get(IS_EDIT) != null) { 85 String currentMondrianXmlaDefinition = (String ) context 86 .getFlowScope().get(CURRENT_MONDRIAN_XMLA_DEFINITION_ATTR); 87 mondrianXmlaDefinition = (MondrianXMLADefinition) repository 88 .getResource(executionContext, 89 currentMondrianXmlaDefinition); 90 wrapper = new MondrianXmlaSourceWrapper(mondrianXmlaDefinition); 91 wrapper.setMode(BaseDTO.MODE_STAND_ALONE_EDIT); 92 } else { 93 mondrianXmlaDefinition = (MondrianXMLADefinition) repository 94 .newResource(executionContext, MondrianXMLADefinition.class); 95 String parentFolder = (String ) context.getFlowScope().get( 96 PARENT_FOLDER_ATTR); 97 if (parentFolder == null || parentFolder.trim().length() == 0) 98 parentFolder = "/"; 99 mondrianXmlaDefinition.setParentFolder(parentFolder); 100 wrapper = new MondrianXmlaSourceWrapper(mondrianXmlaDefinition); 101 wrapper.setMode(BaseDTO.MODE_STAND_ALONE_NEW); 102 } 103 getAllMondrianConnections(wrapper); 104 return wrapper; 105 } 106 107 112 private void getAllMondrianConnections(MondrianXmlaSourceWrapper wrapper) { 113 FilterCriteria filterCriteria = FilterCriteria 114 .createFilter(MondrianConnection.class); 115 ResourceLookup[] resourceLookup = repository.findResource(null, 116 filterCriteria); 117 List allMondrianConnections = null; 118 if (resourceLookup != null && resourceLookup.length != 0) { 119 log("Found Mondrian conneciton lookups size=" 120 + resourceLookup.length); 121 allMondrianConnections = new ArrayList (resourceLookup.length); 122 for (int i = 0; i < resourceLookup.length; i++) { 123 Resource resource = (Resource) resourceLookup[i]; 124 Object resourceObj = repository.getResource(null, resource 125 .getURIString()); 126 if (!allMondrianConnections 127 .contains(((OlapClientConnection) resourceObj) 128 .getURIString())) { 129 allMondrianConnections 130 .add(((OlapClientConnection) resourceObj) 131 .getURIString()); 132 } 133 } 134 wrapper.setAllMondrianConnections(allMondrianConnections); 135 } 136 } 137 138 145 public Event saveMondrianXmlaSource(RequestContext context) 146 throws Exception { 147 MondrianXmlaSourceWrapper wrapper = (MondrianXmlaSourceWrapper) getFormObject(context); 148 try { 149 if (wrapper.isStandAloneMode()) { 150 MondrianConnection mondrianConnection = (MondrianConnection) repository 151 .getResource(null, wrapper.getConnectionUri()); 152 wrapper.getMondrianXmlaDefinition().setMondrianConnection( 153 mondrianConnection); 154 wrapper.getMondrianXmlaDefinition() 155 .setMondrianConnectionReference( 156 mondrianConnection.getURIString()); 157 repository.saveResource(null, wrapper 158 .getMondrianXmlaDefinition()); 159 wrapper.setConnectionInvalid(false); 160 } 161 } catch (Exception e) { 162 wrapper.setConnectionInvalid(true); 163 } 164 return success(); 165 } 166 167 172 public RepositoryService getRepository() { 173 return repository; 174 } 175 176 181 public void setRepository(RepositoryService repository) { 182 this.repository = repository; 183 } 184 185 190 public OlapConnectionService getConnectionService() { 191 return connectionService; 192 } 193 194 199 public void setConnectionService(OlapConnectionService connectionService) { 200 this.connectionService = connectionService; 201 } 202 203 209 public void initBinder(RequestContext context, DataBinder binder) { 210 binder.registerCustomEditor(byte[].class, 211 new ByteArrayMultipartFileEditor()); 212 } 213 214 221 public Event setupEditForm(RequestContext context) throws Exception { 222 AttributeMap rs = context.getRequestScope(); 223 rs.put(FORM_OBJECT_KEY, getFormObject(context)); 224 return success(); 225 } 226 227 232 private void log(String text) { 233 log.debug(text); 234 } 235 } 236 237 | Popular Tags |