/*******************************************************************************
*
* Copyright (c) 2010-2011 Sonatype, Inc.
*
* 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:
*
*
*
*
*******************************************************************************/
package org.hudsonci.maven.plugin;
import com.google.inject.Key;
import org.hudsonci.inject.Smoothie;
import org.hudsonci.maven.model.UniqueList;
import org.hudsonci.maven.plugin.artifactrecorder.ArtifactArchiver;
import org.hudsonci.maven.plugin.artifactrecorder.ArtifactFingerprinter;
import org.hudsonci.maven.plugin.builder.BuildStateRecord;
import org.hudsonci.maven.plugin.builder.MavenBuildAction;
import org.hudsonci.maven.plugin.builder.MavenBuilder;
import org.hudsonci.maven.plugin.builder.MavenBuilderDescriptor;
import org.hudsonci.maven.plugin.dependencymonitor.DependencyNotifier;
import org.hudsonci.maven.plugin.dependencymonitor.DependencyTrigger;
import org.hudsonci.maven.plugin.install.MavenInstallation;
import org.hudsonci.utils.marshal.XStreamMarshaller;
import org.hudsonci.utils.marshal.xref.FileXReferenceStore;
import org.hudsonci.utils.marshal.xref.XReferenceConverter;
import org.hudsonci.utils.marshal.xref.XReferenceStoreConverter;
import org.hudsonci.maven.model.state.BuildStateDTO;
import com.thoughtworks.xstream.XStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import hudson.Plugin;
import hudson.XmlFile;
import hudson.model.Items;
import hudson.model.Run;
import javax.inject.Named;
import javax.inject.Singleton;
/**
* Hudson Maven plugin.
*
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
* @since 2.1.0
*/
@Named
@Singleton
public class MavenPlugin
extends Plugin
{
private static final Logger log = LoggerFactory.getLogger(MavenPlugin.class);
@Override
public void start() throws Exception {
// Setup the marshaller which will handle persisting referenced data
// Do not use XStream2... causes problems with @XStreamImplicit (used in UniqueList)
XStream xs = new XStream();
xs.setClassLoader(getClass().getClassLoader());
xs.processAnnotations(new Class[] {
BuildStateDTO.class,
UniqueList.class
});
XStreamMarshaller marshaller = new XStreamMarshaller(xs);
// Setup the reference converter
FileXReferenceStore store = new FileXReferenceStore(marshaller);
XReferenceStoreConverter converter = new XReferenceStoreConverter(
store, Run.XSTREAM.getMapper(), Run.XSTREAM.getReflectionProvider())
{
@Override
public boolean canConvert(final Class type) {
return type == BuildStateRecord.StateReference.class;
}
};
converter.setHolderType(XReferenceConverter.HolderType.SOFT);
// Configure the standard xstream instance to know about our converter plus type configuration
Run.XSTREAM.registerConverter(converter);
Run.XSTREAM.processAnnotations(new Class[] {
MavenBuildAction.class,
BuildStateRecord.class
});
Items.XSTREAM.processAnnotations(new Class[] {
MavenBuilder.class,
DependencyNotifier.class,
DependencyTrigger.class,
ArtifactFingerprinter.class,
ArtifactArchiver.class
});
XmlFile.DEFAULT_XSTREAM.processAnnotations(new Class[] {
MavenBuilderDescriptor.class,
MavenInstallation.class
});
}
}