/*
* JBoss, Home of Professional Open Source
* Copyright 2015, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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 org.jboss.shrinkwrap.resolver.impl.maven;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.maven.settings.Settings;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.jboss.shrinkwrap.resolver.api.InvalidConfigurationFileException;
import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession;
import org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenRepositorySystem;
Configurable implementation of a MavenWorkingSession
, encapsulating Maven/Aether backend.
This is an abstract class and doesn't contain all the implementation - this class contains:
- methods for generating an instance of
DefaultRepositorySystemSession
when necessary
- methods for modification of properties related to the
DefaultRepositorySystemSession
- methods related to the
MavenWorkingSession
that doesn't need to have created an instance of the DefaultRepositorySystemSession
for its calling
- delegating methods related to
Settings
Author: Matous Jobanek, Karel Piwko, Michal Matloka
/**
* Configurable implementation of a {@link MavenWorkingSession}, encapsulating Maven/Aether backend.
* <p>
* This is an abstract class and doesn't contain all the implementation - this class contains:
* </p>
* <ul>
* <li>methods for generating an instance of {@link DefaultRepositorySystemSession} when necessary</li>
* <li>methods for modification of properties related to the {@link DefaultRepositorySystemSession}</li>
* <li>methods related to the {@link MavenWorkingSession} that doesn't need to have created an instance
* of the {@link DefaultRepositorySystemSession} for its calling</li>
* <li>delegating methods related to {@link Settings}</li>
* </ul>
*
*
* @author <a href="mailto:mjobanek@redhat.com">Matous Jobanek</a>
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
* @author <a href="mailto:mmatloka@gmail.com">Michal Matloka</a>
*/
public abstract class ConfigurableMavenWorkingSessionImpl implements MavenWorkingSession {
private static final Logger log = Logger.getLogger(ConfigurableMavenWorkingSessionImpl.class.getName());
private DefaultRepositorySystemSession session;
private SettingsManager settingsManager;
private boolean useLegacyLocalRepository = false;
private final MavenRepositorySystem system;
private boolean disableClassPathWorkspaceReader = false;
public ConfigurableMavenWorkingSessionImpl() {
this.system = new MavenRepositorySystem();
this.settingsManager = new SettingsManager();
}
@Override
public MavenWorkingSession configureSettingsFromFile(File globalSettings, File userSettings)
throws InvalidConfigurationFileException {
this.settingsManager.configureSettingsFromFile(globalSettings, userSettings);
return regenerateSession();
}
@Override
public MavenWorkingSession regenerateSession() {
generateSession();
return this;
}
@Override
public void setOffline(final boolean offline) {
if (log.isLoggable(Level.FINER)) {
log.finer("Set offline mode programatically to: " + offline);
}
this.settingsManager.setOffline(offline);
}
@Override
public void disableClassPathWorkspaceReader() {
if (log.isLoggable(Level.FINEST)) {
log.finest("Disabling ClassPath resolution");
}
disableClassPathWorkspaceReader = true;
}
@Override
public void useLegacyLocalRepository(boolean useLegacyLocalRepository) {
if (this.useLegacyLocalRepository == useLegacyLocalRepository) {
return;
}
log.log(Level.FINEST, "Using legacy local repository");
this.useLegacyLocalRepository = useLegacyLocalRepository;
}
Returns an instance of the DefaultRepositorySystemSession
that is generated if hasn't been yet. Returns: an instance of the DefaultRepositorySystemSession
/**
* Returns an instance of the {@link DefaultRepositorySystemSession} that is generated if hasn't been yet.
*
* @return an instance of the {@link DefaultRepositorySystemSession}
*/
protected DefaultRepositorySystemSession getSession() {
if (this.session == null) {
generateSession();
}
return this.session;
}
Returns an instance of the Settings
. See Also: Returns: an instance of the Settings
/**
* Returns an instance of the {@link Settings}.
*
* @return an instance of the {@link Settings}
* @see SettingsManager#getSettings()
*/
protected Settings getSettings() {
return this.settingsManager.getSettings();
}
Returns whether the resolver should work in offline mode or not
See Also: Returns: whether the resolver should work in offline mode or not
/**
* Returns whether the resolver should work in offline mode or not
*
* @return whether the resolver should work in offline mode or not
* @see SettingsManager#isOffline()
*/
protected boolean isOffline() {
return this.settingsManager.isOffline();
}
Returns an instance of the MavenRepositorySystem
. Returns: an instance of the MavenRepositorySystem
/**
* Returns an instance of the {@link MavenRepositorySystem}.
*
* @return an instance of the {@link MavenRepositorySystem}
*/
protected MavenRepositorySystem getSystem() {
return this.system;
}
// utility methods
Regenerates an instance of the DefaultRepositorySystemSession
if there is already any /**
* Regenerates an instance of the {@link DefaultRepositorySystemSession} if there is already any
*/
private void regenerateSessionIfNotNull() {
if (this.session != null) {
regenerateSession();
}
}
Generates an instance of the DefaultRepositorySystemSession
and takes into account related properties /**
* Generates an instance of the {@link DefaultRepositorySystemSession} and takes into account related properties
*/
private void generateSession() {
this.session = this.system.getSession(getSettings(), this.useLegacyLocalRepository);
if (this.disableClassPathWorkspaceReader) {
((DefaultRepositorySystemSession) this.session).setWorkspaceReader(null);
}
}
}