Java tutorial
/** * */ package com.sap.prd.mobile.ios.mios; /* * #%L * Xcode Maven Plugin * %% * Copyright (C) 2012 SAP AG * %% * 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. * #L% */ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FilenameUtils; /** * * */ public class FrameworkStructureValidator { private final File fmwkDir; private List<String> errorMsgs; public FrameworkStructureValidator(File fmwkDir) { this.fmwkDir = fmwkDir; } /** * * @return a non <code>null</code> list containing the validation errors. The list is empty if the * framework has a valid structure. */ public List<String> validate() { errorMsgs = new ArrayList<String>(); if (!fmwkDir.isDirectory()) { errorMsgs.add("'" + fmwkDir.getAbsolutePath() + "' is not a directory"); } else { validateSubdirExistence("Versions", "Versions/A", "Versions/A/Headers", "Versions/A/Resources"); String fmwkName = FilenameUtils.removeExtension(fmwkDir.getName()); validateLib("Versions/A/" + fmwkName); validateLink("Headers", "Versions/A/Headers"); validateLink("Resources", "Versions/A/Resources"); validateLink(fmwkName, "Versions/A/" + fmwkName); validateLink("Versions/Current", "Versions/A"); } return errorMsgs; } private void validateSubdirExistence(String... subDirNames) { for (String subDirName : subDirNames) { File dir = new File(fmwkDir, subDirName); if (!dir.isDirectory()) { errorMsgs.add("Missing the required subdirectory '" + subDirName + "'"); } } } private void validateLib(String relativeLibPath) { File libFile = new File(fmwkDir, relativeLibPath); if (!libFile.exists()) { errorMsgs.add("Missing the required library file '" + relativeLibPath + "'"); } else { try { if (!new FatLibAnalyzer(libFile).containsI386()) { errorMsgs.add("'" + libFile.getAbsolutePath() + "' does not contain i386 architecture. You should configure your project accordingly to build " + "for the simulator architecture, otherwise the applications, which are using this framework will " + "not be able to run in Simulator. For this, set the 'Build Active Architecture Only' to 'NO' for both" + "'Release' and 'Debug' configuration."); } } catch (IOException e) { errorMsgs.add("Error ocurred during validation of the library '" + libFile.getAbsolutePath() + "' for i386"); } } } private void validateLink(String from, String to) { File fromLink = new File(fmwkDir, from); File toFile = new File(fmwkDir, to); try { if (!FileUtils.isSymbolicLink(fromLink)) { errorMsgs.add("Expected inside the framework a symbolic link from '" + from + "' to '" + to + "'"); } else if (!fromLink.getCanonicalPath().equals(toFile.getCanonicalPath())) { errorMsgs.add("The link '" + from + "' does not point to '" + to + "'"); } } catch (IOException ioe) { errorMsgs.add("Could not validate the symbolic link from '" + from + "' to '" + to + "': " + ioe.getMessage()); } } }