/* * Copyright © 2014-2015 Cask Data, Inc. * * 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 co.cask.cdap.internal.app.verification; import co.cask.cdap.api.app.ApplicationSpecification; import co.cask.cdap.app.verification.AbstractVerifier; import co.cask.cdap.app.verification.VerifyResult; import co.cask.cdap.error.Err; import co.cask.cdap.proto.Id; /** * This class is responsible for verifying the Application details of * the {@link ApplicationSpecification}. * <p/> * <p> * Following are the checks done for Application * <ul> * <li>Application name is an ID</li> * <li>Application contains at one of the following: Flow, Batch/MR</li> * </ul> * </p> */ public class ApplicationVerification extends AbstractVerifier<ApplicationSpecification> { /** * Verifies {@link ApplicationSpecification} being provide. * * @param input to be verified * @return An instance of {@link VerifyResult} depending of status of verification. */ @Override public VerifyResult verify(Id.Application appId, final ApplicationSpecification input) { VerifyResult verifyResult = super.verify(appId, input); if (!verifyResult.isSuccess()) { return verifyResult; } // Check if there is at least one of the following : Flow or MapReduce or Workflow for now. // TODO (terence): Logic here is really not good. Need to refactor. if (input.getFlows().isEmpty() && input.getMapReduce().isEmpty() && input.getSpark().isEmpty() && input.getWorkflows().isEmpty() && input.getServices().isEmpty() && input.getWorkers().isEmpty()) { return VerifyResult.failure(Err.Application.ATLEAST_ONE_PROCESSOR, input.getName()); } return VerifyResult.success(); } @Override protected String getName(ApplicationSpecification input) { return input.getName(); } }