/**
* Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cloudsmith
*
*/
package org.cloudsmith.geppetto.forge.impl;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.cloudsmith.geppetto.diagnostic.Diagnostic;
import org.cloudsmith.geppetto.forge.MetadataExtractor;
import org.cloudsmith.geppetto.forge.util.Checksums;
import org.cloudsmith.geppetto.forge.util.Types;
import org.cloudsmith.geppetto.forge.v2.model.Metadata;
public abstract class AbstractMetadataExtractor implements MetadataExtractor {
@Override
public boolean canExtractFrom(File moduleDirectory, FileFilter filter) {
File mdSource = new File(moduleDirectory, getPrimarySource());
return filter.accept(mdSource) && mdSource.exists();
}
@Override
public boolean hasTypesAndProviders() {
return false;
}
@Override
public Metadata parseMetadata(File moduleDirectory, boolean includeTypesAndChecksums, FileFilter filter,
File[] extractedFrom, Diagnostic result) throws IOException {
File metadataFile = new File(moduleDirectory, getPrimarySource());
if(extractedFrom != null)
extractedFrom[0] = metadataFile;
if(!canExtractFrom(moduleDirectory, filter))
throw new FileNotFoundException(metadataFile.getAbsolutePath());
Metadata md = performMetadataExtraction(metadataFile, result);
if(md != null && !hasTypesAndProviders() && includeTypesAndChecksums) {
md.setTypes(Types.loadTypes(new File(moduleDirectory, "lib/puppet"), filter));
md.setChecksums(Checksums.loadChecksums(moduleDirectory, filter));
}
return md;
}
protected abstract Metadata performMetadataExtraction(File existingFile, Diagnostic result) throws IOException;
}