FolderLayout.java

/*
 * #%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%
 */
package com.sap.prd.mobile.ios.mios;

import java.io.File;
import java.util.Properties;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.MavenProject;

/**
 * Helper methods for Xcode build to retrieve certain directories.
 * 
 */
class FolderLayout
{
  final static String LIBS_DIR_NAME = "libs";
  final static String HEADERS_DIR_NAME = "headers";
  final static String XCODE_DEPS_TARGET_FOLDER = "xcode-deps";

  static File getFolderForExtractedHeaders(MavenProject project, final String configuration, final String sdk)
  {
    return new File(new File(new File(project.getBuild().getDirectory()), HEADERS_DIR_NAME), configuration + "-" + sdk);
  }

  static File getFolderForExtractedLibs(MavenProject project, final String configuration, final String sdk)
  {
    return new File(new File(new File(project.getBuild().getDirectory()), LIBS_DIR_NAME), configuration + "-" + sdk);
  }

  static File getFolderForExtractedBundles(MavenProject project)
  {
    return new File(new File(project.getBuild().getDirectory()), "bundles");
  }

  static File getFolderForExtractedFrameworks(MavenProject project)
  {
    return new File(new File(new File(project.getBuild().getDirectory()), XCODE_DEPS_TARGET_FOLDER), "frameworks");
  }

  static File getFolderForAdditionalPackagingType(MavenProject project, String type)
  {
    return new File(new File(new File(project.getBuild().getDirectory()), XCODE_DEPS_TARGET_FOLDER), type);
  }

  static File getFolderForExtractedFatLibs(MavenProject project, final String configuration)
  {
    return new File(project.getBuild().getDirectory() + "/" + XCODE_DEPS_TARGET_FOLDER + "/" + LIBS_DIR_NAME + "/"
          + configuration);
  }

  static File getFolderForExtractedHeadersWithGA(MavenProject project, final String configuration, final String sdk,
        final String groupId, final String artifactId)
  {
    return new File(new File(getFolderForExtractedHeaders(project, configuration, sdk), groupId), artifactId);
  }

  static File getFolderForExtractedFatLibsWithGA(MavenProject project, final String configuration,
        final String groupId, final String artifactId)
  {
    return new File(new File(getFolderForExtractedFatLibs(project, configuration), groupId), artifactId);
  }

  static File getFolderForExtractedLibsWithGA(MavenProject project, final String configuration, final String sdk,
        final String groupId, final String artifactId)
  {
    return new File(new File(getFolderForExtractedLibs(project, configuration, sdk), groupId), artifactId);
  }

  static File getFolderForExtractedBundlesWithGA(MavenProject project, final String groupId, final String artifactId)
  {
    return new File(new File(getFolderForExtractedBundles(project), groupId), artifactId);
  }

  static File getFolderForExtractedFrameworkswithGA(MavenProject project, final String groupId, final String artifactId)
  {
    return new File(new File(getFolderForExtractedFrameworks(project), groupId), artifactId);
  }

  static File getFolderForExtractedFrameworkswithGA(MavenProject project, final String groupId,
        final String artifactId, final String configuration)
  {
    return new File(new File(new File(getFolderForExtractedFrameworks(project), configuration), groupId), artifactId);
  }

  static File getFolderForAdditionalPackagingTypeWithGA(MavenProject project, final String groupId,
        final String artifactId, String type)
  {
    return new File(new File(getFolderForAdditionalPackagingType(project, type), groupId), artifactId);
  }

  static File getFolderForExtractedMainArtifact(MavenProject project)
  {
    return new File(new File(project.getBuild().getDirectory()), "main.artifact");
  }

  static File getFolderForExtractedPrimaryArtifact(MavenProject project, Artifact primaryArtifact)
  {
    return new File(new File(new File(new File(project.getBuild().getDirectory()), "extractedPrimaryArtifacts"),
          primaryArtifact.getGroupId()), primaryArtifact.getArtifactId());
  }

  /**
   * Checks if the source folder location has been explicitly set by the "xcode.sourceDirectory". If
   * not the default "src/xcode" is returned.
   */
  static File getSourceFolder(MavenProject project)
  {
    final Properties projectProperties = project.getProperties();

    if (projectProperties.containsKey(XCodeDefaultConfigurationMojo.XCODE_SOURCE_DIRECTORY)) {
      return new File(project.getBasedir(),
            projectProperties.getProperty(XCodeDefaultConfigurationMojo.XCODE_SOURCE_DIRECTORY));
    }
    return new File(project.getBasedir(), XCodeDefaultConfigurationMojo.DEFAULT_XCODE_SOURCE_DIRECTORY);

  }
}