/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* Licensed 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.qualogy.qafe.bind.domain;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jibx.runtime.IUnmarshallingContext;
import com.qualogy.qafe.bind.PostProcessing;
import com.qualogy.qafe.bind.ValidationException;
import com.qualogy.qafe.bind.orm.jibx.BindException;
import com.qualogy.qafe.bind.presentation.component.Window;
import com.qualogy.qafe.bind.presentation.event.Event;
import com.qualogy.qafe.bind.util.Validator;
/**
* Resource holder for applicationmappings, this class can hold a mapping file path
* or actual mapping (NOTE: so only one is allowed in which filepath is leading)
* @author
*/
public class ApplicationMapping implements Serializable, PostProcessing{
private static final long serialVersionUID = -3104524285974142531L;
protected PresentationTier presentationTier;
protected BusinessTier businessTier;
protected IntegrationTier integrationTier;
protected ResourceTier resourceTier;
private HashMap<String, Event> events = new HashMap<String, Event>();
public ApplicationMapping(){
super();
}
private ApplicationMapping(PresentationTier presentationTier, BusinessTier businessTier, IntegrationTier integrationTier, ResourceTier resourceTier) {
this();
this.presentationTier = presentationTier;
this.businessTier = businessTier;
this.integrationTier = integrationTier;
this.resourceTier = resourceTier;
}
public static ApplicationMapping create(BusinessTier businessTier,IntegrationTier integrationTier,ResourceTier resourceTier){
return create(null, businessTier, integrationTier, resourceTier);
}
public static ApplicationMapping create(PresentationTier presentationTier,BusinessTier businessTier,IntegrationTier integrationTier,ResourceTier resourceTier){
return new ApplicationMapping(presentationTier, businessTier, integrationTier, resourceTier);
}
/**
* @return the businessTier
*/
public BusinessTier getBusinessTier() {
return businessTier;
}
/**
* @param businessTier
* the businessTier to set
*/
public void setBusinessTier(BusinessTier businessTier) {
this.businessTier = businessTier;
}
/**
* @return the integrationTier
*/
public IntegrationTier getIntegrationTier() {
return integrationTier;
}
/**
* @param integrationTier
* the integrationTier to set
*/
public void setIntegrationTier(IntegrationTier integrationTier) {
this.integrationTier = integrationTier;
}
/**
* @return the presentationTier
*/
public PresentationTier getPresentationTier() {
return presentationTier;
}
/**
* @param presentationTier
* the presentationTier to set
*/
public void setPresentationTier(PresentationTier presentationTier) {
this.presentationTier = presentationTier;
}
/**
* @return the resourceTier
*/
public ResourceTier getResourceTier() {
return resourceTier;
}
/**
* @param resourceTier
* the resourceTier to set
*/
public void setResourceTier(ResourceTier resourceTier) {
this.resourceTier = resourceTier;
}
public HashMap<String, Event> getEvents() {
return events;
}
/**
* method to conveniently put a tier on the genesisframework.
* this method will override the existing value with the given
* one.
* @param tier
* @throws IllegalArgumentException when tier is null or not applicable
*/
public void put(Tier tier){
if(tier instanceof BusinessTier){
this.businessTier = (BusinessTier)tier;
}else if(tier instanceof PresentationTier){
this.presentationTier = (PresentationTier)tier;
}else if(tier instanceof IntegrationTier){
this.integrationTier = (IntegrationTier)tier;
}else if(tier instanceof ResourceTier){
this.resourceTier = (ResourceTier)tier;
}
}
public void addAll(ApplicationMapping otherMapping){
// presentationTier
if(presentationTier == null) {
presentationTier = otherMapping.presentationTier;
}else{
presentationTier.addAll(otherMapping.presentationTier);
}
// businessTier
if (businessTier == null) {
businessTier = otherMapping.getBusinessTier();
}else {
businessTier.addAll(otherMapping.getBusinessTier());
}
// integrationTier
if (integrationTier == null) {
integrationTier = otherMapping.getIntegrationTier();
}else {
integrationTier.addAll(otherMapping.getIntegrationTier());
}
// resourceTier
if (resourceTier == null) {
resourceTier = otherMapping.getResourceTier();
}else {
resourceTier.addAll(otherMapping.getResourceTier());
}
}
/**
* method called to do processing after variables have been set
* the method validates
*/
public void performPostProcessing() {
try {
Validator.validate(this);
} catch (ValidationException e) {
throw new BindException(e);
}
}
public void postset(IUnmarshallingContext context) {
performPostProcessing();
}
public Boolean resolveDefaultLoginWindow(String defaultLoginWindowRef, ApplicationMapping resourceAppMapping, String customLoginWindowRef) {
if ((getPresentationTier() != null) && (customLoginWindowRef != null)) {
Window defaultLoginWindow = null;
Window customLoginWindow = null;
Map<String, Window> windowNamesMap = getPresentationTier().view.getWindowNamesMap();
if ((windowNamesMap != null) && windowNamesMap.containsKey(defaultLoginWindowRef)) {
defaultLoginWindow = windowNamesMap.get(defaultLoginWindowRef);
}
if (resourceAppMapping == null) {
if ((windowNamesMap != null) && windowNamesMap.containsKey(customLoginWindowRef)) {
customLoginWindow = windowNamesMap.get(customLoginWindowRef);
}
} else {
Map<String, Window> resourceWindowNamesMap = resourceAppMapping.getPresentationTier().view.getWindowNamesMap();
if ((resourceWindowNamesMap != null) && (resourceWindowNamesMap.containsKey(customLoginWindowRef))) {
customLoginWindow = resourceWindowNamesMap.get(customLoginWindowRef);
}
}
if ((defaultLoginWindow != null) && (customLoginWindow != null)) {
defaultLoginWindow.setDisplayname(customLoginWindow.getDisplayname());
defaultLoginWindow.setWidth(customLoginWindow.getWidth());
defaultLoginWindow.setHeight(customLoginWindow.getHeight());
defaultLoginWindow.setRootPanel(customLoginWindow.getRootPanel());
List<Event> customEventList = customLoginWindow.getEvents();
if (customEventList != null) {
for (int i=0; i<customEventList.size(); i++) {
Event customEvent = customEventList.get(i);
if (!defaultLoginWindow.getEventsMap().containsKey(customEvent.getId())) {
defaultLoginWindow.add(customEvent);
}
}
}
return true;
}
}
return false;
}
// Events are populated to have the look up when they are triggered in EventHandler
public void loadLookupEvents() {
this.getEvents().clear();
// Extract local events.
if (this.getPresentationTier() != null && this.getPresentationTier().getView() != null) {
List<Window> windowList = this.getPresentationTier().getView().getWindows();
if (windowList != null) {
for(Window window : windowList) {
if (window.getEvents() != null) {
String windowId = window.getId();
for (Event event : window.getEvents()) {
event.setWindowId(windowId);
this.getEvents().put(windowId+event.getId(), event);
}
}
}
}
}
// Extract global events
if (this.getPresentationTier() != null && this.getPresentationTier().getEvents() != null) {
List<Event> eventList = this.getPresentationTier().getEvents();
if(eventList != null) {
for (Event event : eventList) {
this.getEvents().put(event.getId(), event);
}
}
}
}
}