/** * Copyright (C) 2015 Orange * 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.francetelecom.clara.cloud.presentation.tools; import com.francetelecom.clara.cloud.commons.BusinessException; import com.francetelecom.clara.cloud.commons.InvalidMavenReferenceException; import com.francetelecom.clara.cloud.core.service.exception.*; import com.francetelecom.clara.cloud.logicalmodel.InvalidConfigServiceException; import com.francetelecom.clara.cloud.logicalmodel.LogicalModelNotConsistentException; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.model.Model; import java.util.ArrayList; import java.util.List; public class BusinessExceptionHandler { Component component; enum MessageLevel { ERROR, INFO }; public BusinessExceptionHandler(Component c) { this.component = c; } public void error(BusinessException e) { process(MessageLevel.ERROR, e); } public void info(BusinessException e) { process(MessageLevel.INFO, e); } private void process(MessageLevel level, BusinessException e) { if(e instanceof LogicalModelNotConsistentException) { processLogicalModelNotConsistentException(level, (LogicalModelNotConsistentException) e); } else if (e instanceof InvalidConfigServiceException) { processInvalidConfigServiceException(level, (InvalidConfigServiceException) e); } else if (e instanceof InvalidMavenReferenceException) { processInvalidMavenReferenceException(level, (InvalidMavenReferenceException) e); } else if (e instanceof ApplicationNotFoundException) { processApplicationNotFoundException(level, (ApplicationNotFoundException) e); } else if (e instanceof ApplicationReleaseNotFoundException) { processApplicationReleaseNotFoundException(level, (ApplicationReleaseNotFoundException) e); } else if (e instanceof EnvironmentNotFoundException) { processEnvironmentNotFoundException(level, (EnvironmentNotFoundException) e); } else if (e instanceof PaasUserNotFoundException) { processPaasUserNotFoundException(level, (PaasUserNotFoundException) e); } else if (e instanceof ObjectNotFoundException) { processObjectNotFoundException(level, (ObjectNotFoundException) e); } else { processUnknownBusinessException(level, e); } } private void processInvalidMavenReferenceException(MessageLevel level, InvalidMavenReferenceException e) { String message = ""; String [] parameters = new String[1]; parameters[0] = e.getMavenReference().toGavString(); switch(e.getType()) { case ARTIFACT_NOT_FOUND: message = component.getString("portal.logicaldeployment.artifactnotfound", new Model<String[]>(parameters)); break; case UNKNOWN: default: message = component.getString("portal.logicaldeployment.invalidmavenref", new Model<String[]>(parameters)); break; } addMessage(level, message); } private void processInvalidConfigServiceException(MessageLevel level, InvalidConfigServiceException e) { String msg = ""; List<String> args = new ArrayList<String>(); args.add(e.getImpactedElementName()); switch (e.getType()) { case UNKNOWN: msg = component.getString("portal.designer.config.summary.error.unknown.jee", new Model<String[]>(args.toArray(new String[1]))); break; case TOO_LONG: args.add(String.valueOf(e.getMaxLength())); msg = component.getString("portal.designer.config.summary.error.tooLong.jee", new Model<String[]>(args.toArray(new String[2]))); break; case TOO_MANY_ENTRIES: args.add(String.valueOf(e.getEntryCount())); args.add(String.valueOf(e.getMaxEntryCount())); msg = component.getString("portal.designer.config.summary.error.tooManyEntries.jee", new Model<String[]>(args.toArray(new String[3]))); break; case DUPLICATE_KEYS: args.add(e.getDuplicateKeys().toString()); msg = component.getString("portal.designer.config.summary.error.duplicateKeys.jee", new Model<String[]>(args.toArray(new String[2]))); break; case SYNTAX_ERROR: msg = component.getString("portal.designer.config.summary.error.syntaxError.jee", new Model<String[]>(args.toArray(new String[1]))); break; default: msg = component.getString("portal.designer.config.summary.error.unknown"); break; } addMessage(level, msg); } private void processLogicalModelNotConsistentException(MessageLevel level, LogicalModelNotConsistentException e) { for(BusinessException error:e.getErrors()) process(level,error); } private void processApplicationNotFoundException(MessageLevel level, ApplicationNotFoundException e) { String msg = component.getString("portal.application.notfound"); addMessage(level, msg); } private void processApplicationReleaseNotFoundException(MessageLevel level, ApplicationReleaseNotFoundException e) { String msg = component.getString("portal.release.notfound"); addMessage(level, msg); } private void processEnvironmentNotFoundException(MessageLevel level, EnvironmentNotFoundException e) { String msg = component.getString("portal.environment.error.notfound"); addMessage(level, msg); } private void processPaasUserNotFoundException(MessageLevel level, PaasUserNotFoundException e) { String msg = component.getString("portal.user.error.notfound", new Model<String[]>(new String[]{e.getMissingUserId().getValue()})); addMessage(level, msg); } private void processObjectNotFoundException(MessageLevel level, ObjectNotFoundException e) { String msg = component.getString("portal.error.notfound"); addMessage(level, msg); } private void processUnknownBusinessException(MessageLevel level, BusinessException e) { String [] parameters = new String[1]; parameters[0] = e.getMessage(); String message = component.getString("portal.error.business", new Model<String[]>(parameters)); addMessage(level, message); } private void addMessage(MessageLevel level, String message) { switch (level) { case ERROR: component.error(message); break; case INFO: component.info(message); break; default: component.error(message); } } public static void addError(Component feedbackPanel, BusinessException e) { BusinessExceptionHandler handler = new BusinessExceptionHandler(feedbackPanel); handler.error(e); } public static void addError(AjaxRequestTarget target, Component feedbackPanel, BusinessException e) { addError(feedbackPanel, e); target.add(feedbackPanel); } }