/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.datatools.connectivity.IConnectionProfile; import org.eclipse.emf.ecore.EObject; import org.eclipse.osgi.util.NLS; import org.teiid.core.designer.ModelerCoreException; import org.teiid.core.designer.util.CoreStringUtil; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.types.DatatypeManager; import org.teiid.designer.datatools.profiles.ws.IWSProfileConstants; import org.teiid.designer.modelgenerator.wsdl.ui.Messages; import org.teiid.designer.modelgenerator.wsdl.ui.ModelGeneratorWsdlUiConstants; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.WSDLImportWizardManager; import org.teiid.designer.ui.common.ICredentialsCommon; import org.teiid.designer.ui.viewsupport.ModelNameUtil; /** * Class designed to provide validation logic and IStatus values for the WSDL importer wizard. * * @since 8.0 */ public class ImportManagerValidator { public static final DatatypeManager datatypeManager = ModelerCore.getWorkspaceDatatypeManager(); String PLUGIN_ID = ModelGeneratorWsdlUiConstants.PLUGIN_ID; WSDLImportWizardManager manager; IStatus connectionProfileStatus; IStatus operationsStatus; IStatus modelsStatus; Map<ProcedureGenerator, IStatus> proceduresStatusMap; public ImportManagerValidator(WSDLImportWizardManager manager) { super(); this.manager = manager; this.proceduresStatusMap = new HashMap<ProcedureGenerator, IStatus>(10); } public void validate() { connectionProfileStatus = validateConnectionProfile(); modelsStatus = validateResourceInfo(); operationsStatus = validateProcedures(); } public IStatus getConnectionProfileStatus() { if (this.connectionProfileStatus == null) validate(); return this.connectionProfileStatus; } public IStatus getOperationsStatus() { if (this.operationsStatus == null) validate(); return this.operationsStatus; } public IStatus getModelsStatus() { if (this.modelsStatus == null) validate(); return this.modelsStatus; } /** * Check for MultiStatus and determine highest severity message * * @param status * @return */ public String getPrimaryMessage(IStatus status) { if( status instanceof MultiStatus && status.getChildren().length > 0) { if( status.getMessage() != null && status.getMessage().trim().length() == 0 ) { int maxSeverity = status.getSeverity(); for( IStatus childStatus : ((MultiStatus)status).getChildren()) { if( maxSeverity == childStatus.getSeverity() ) { return childStatus.getMessage(); } } } else { return status.getMessage(); } } else { return status.getMessage(); } return StringConstants.EMPTY_STRING; } public IStatus getProcedureStatus(ProcedureGenerator generator) { return proceduresStatusMap.get(generator); } public IStatus getWorstProcedureStatus() { MultiStatus status = new MultiStatus(PLUGIN_ID, 0, null, null); for(ProcedureGenerator generator : this.manager.getProcedureGenerators() ) { IStatus theStatus = this.proceduresStatusMap.get(generator); if( theStatus != null ) { status.merge(theStatus); } } return status; } private IStatus validateConnectionProfile() { MultiStatus status = new MultiStatus(PLUGIN_ID, 0, null, null); IConnectionProfile connectionProfile = manager.getConnectionProfile(); if (connectionProfile == null) { status.add(createStatus(IStatus.ERROR, Messages.Status_ConnectionProfileMissing)); return status; } Properties properties = connectionProfile.getBaseProperties(); String[] expectedProperties = { IWSProfileConstants.END_POINT_NAME_PROP_ID, IWSProfileConstants.END_POINT_URI_PROP_ID, IWSProfileConstants.SOAP_BINDING, ICredentialsCommon.SECURITY_TYPE_ID }; for (String propertyKey : expectedProperties) { if(properties.get(propertyKey) == null) { status.add(createStatus(IStatus.ERROR, NLS.bind(Messages.Status_ConnectionProfilePropertyMissing, propertyKey))); break; } } return status; } private IStatus validateResourceInfo() { MultiStatus status = new MultiStatus(PLUGIN_ID, 0, null, null); // Validate Source location & model name if (this.manager.getSourceModelLocation() == null ) { status.add(createStatus(IStatus.ERROR, Messages.Status_SourceModelLocationUndefined)); } IStatus nameStatus = null; if (CoreStringUtil.isEmpty(this.manager.getSourceModelName()) ) { status.add(createStatus(IStatus.ERROR, Messages.Status_SourceModelNameUndefined)); } else { nameStatus = ModelNameUtil.validate(this.manager.getSourceModelName(), ModelerCore.MODEL_FILE_EXTENSION, ModelNameUtil.IGNORE_CASE ); if (nameStatus.getSeverity() == IStatus.ERROR) { Status newStatus = new Status(nameStatus.getSeverity(), nameStatus.getPlugin(), ModelNameUtil.MESSAGES.INVALID_SOURCE_MODEL_NAME + nameStatus.getMessage()); status.add(newStatus); } } // Validate View location & model name if (this.manager.getViewModelLocation() == null ) { status.add(createStatus(IStatus.ERROR, Messages.Status_ViewModelLocationUndefined)); } if (CoreStringUtil.isEmpty(this.manager.getViewModelName()) ) { status.add(createStatus(IStatus.ERROR, Messages.Status_ViewModelNameUndefined)); } else { nameStatus = ModelNameUtil.validate(this.manager.getViewModelName(), ModelerCore.MODEL_FILE_EXTENSION, ModelNameUtil.IGNORE_CASE ); if (nameStatus.getSeverity() == IStatus.ERROR) { Status newStatus = new Status(nameStatus.getSeverity(), nameStatus.getPlugin(), ModelNameUtil.MESSAGES.INVALID_VIEW_MODEL_NAME + nameStatus.getMessage()); status.add(newStatus); } } if( status.isOK() ) { if( this.manager.doGenerateDefaultProcedures() ) { return createStatus(IStatus.OK, Messages.Status_AllOkClickFinishToGenerateProcedures); } else { return createStatus(IStatus.OK, Messages.Status_AllOkClickNextToDefineProcedures); } } this.manager.setChanged(false); return status; } private IStatus validateProcedures() { if( this.manager.getProcedureGenerators().isEmpty() ) { return createStatus(IStatus.WARNING, Messages.Error_NoOperationsSelected); } MultiStatus status = new MultiStatus(PLUGIN_ID, 0, null, null); for(ProcedureGenerator generator : this.manager.getProcedureGenerators() ) { IStatus theStatus = generator.validate(); this.proceduresStatusMap.put(generator, theStatus); if( theStatus != null ) { status.merge(theStatus); } } return status; } private IStatus createStatus(int severity, String message) { return new Status(severity, PLUGIN_ID, message); } public static boolean isValidDatatype(String type) { if( type == null) { return false; } // Check Datatypes EObject dType = null; try { dType = datatypeManager.findDatatype(type); } catch (ModelerCoreException ex) { ModelGeneratorWsdlUiConstants.UTIL.log(ex); } return dType != null; } }