Java tutorial
/* * Copyright 2012 AMG.lab, a Bull Group Company * * 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 org.xlcloud.service.impl; import static org.xlcloud.validation.Validations.validateThat; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.log4j.Logger; import org.xlcloud.service.CatalogScopeType; import org.xlcloud.service.VirtualClusterDefinition; import org.xlcloud.service.VirtualClusterDefinitions; import org.xlcloud.service.api.VirtualClusterDefinitionsApi; import org.xlcloud.service.exception.VcmsException; import org.xlcloud.service.exception.VcmsObjectNotFoundException; import org.xlcloud.service.exception.VcmsValidationException; import org.xlcloud.service.manager.ApplicationsManager; import org.xlcloud.service.manager.VcbsManager; import org.xlcloud.service.manager.VirtualClusterDefinitionsManager; /** * TODO [tadamcze] documentation * * @author Andrzej Stasiak, AMG.net * @author Piotr Kulasek-Szwed, AMG.net */ public class VirtualClusterDefinitionsImpl implements VirtualClusterDefinitionsApi { private static final Logger LOG = Logger.getLogger(VirtualClusterDefinitionsImpl.class); @Inject private ApplicationsManager applicationsManager; @Inject private VirtualClusterDefinitionsManager vcDefsManager; @Inject private VcbsManager vcbsManager; /** {@inheritDoc} */ @Override public VirtualClusterDefinitions list(List<Long> appIds, String type, List<String> tags) { if (!appIds.isEmpty()) { return getVirtualClusterDefinitionsForApps(appIds); } if (StringUtils.isNotBlank(type)) { return getVirtualClusterDefinitionsForTypeAndTags(type, tags); } return vcDefsManager.listPublic(); } /** {@inheritDoc} */ @Override public VirtualClusterDefinition get(Long id) { return vcDefsManager.get(id); } /** {@inheritDoc} */ @Override public VirtualClusterDefinition validate(VirtualClusterDefinition definition) throws VcmsValidationException { definition.setTemplate(vcbsManager.validateTemplate(definition.getTemplate())); return definition; } /** {@inheritDoc} */ @Override public VirtualClusterDefinition create(VirtualClusterDefinition definition) throws VcmsValidationException, VcmsException { validateDefinition(definition); // accountId should not be set definition.setAccountId(null); if (definition.getCatalogScope() == null) { definition.setCatalogScope(CatalogScopeType.PUBLIC); } else if (!CatalogScopeType.PUBLIC.equals(definition.getCatalogScope())) { throw new VcmsValidationException("Catalog Scope exception", "During register of public virtual cluster definition catalog scope cannot be set to: " + definition.getCatalogScope().value()); } return vcDefsManager.create(definition); } /** {@inheritDoc} */ @Override public void remove(Long id) { vcDefsManager.remove(id); } /** {@inheritDoc} */ @Override public VirtualClusterDefinition update(Long id, VirtualClusterDefinition definition) throws VcmsObjectNotFoundException, VcmsValidationException { validateThat(id).as("id").isNotNull(); validateDefinition(definition); return vcDefsManager.update(id, definition); } private VirtualClusterDefinitions getVirtualClusterDefinitionsForApps(List<Long> appIds) { LOG.info("Getting VirtualClusterDefinition for applications: [ " + ToStringBuilder.reflectionToString(appIds) + " ]"); Set<String> tags = applicationsManager.getTagsForApplications(new HashSet<Long>(appIds)); String type = applicationsManager.getCommonTypeForApplications(new HashSet<Long>(appIds)); return vcDefsManager.listPublicByTypeAndTags(type, tags); } private VirtualClusterDefinitions getVirtualClusterDefinitionsForTypeAndTags(String type, List<String> tags) { LOG.info("Getting VirtualClusterDefinition by type: [ " + type + " ], and tags: [ " + ToStringBuilder.reflectionToString(tags) + " ]."); return vcDefsManager.listPublicByTypeAndTags(type, new HashSet<String>(tags)); } private void validateDefinition(VirtualClusterDefinition definition) { ModelValidator.validateVirtualClusterDefinition(definition); ModelValidator.validateParameters(definition.getTemplate().getParameters()); } }