/*
* RHQ Management Platform
* Copyright (C) 2005-2010 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.clientapi.server.configuration.ConfigurationServerService;
import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.resource.Resource;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
public class ConfigurationServerServiceImpl implements ConfigurationServerService {
private static final Log LOG = LogFactory.getLog(ConfigurationServerServiceImpl.class);
@Override
public void completeConfigurationUpdate(ConfigurationUpdateResponse response) {
/*
* Would be nice to get the resource name, but it is not in the response, so we could bring back the log message
* that used to be here
*/
ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
int configUpdateId = response.getConfigurationUpdateId();
ResourceConfigurationUpdate configUpdate = configurationManager.getResourceConfigurationUpdate(
subjectManager.getOverlord(), configUpdateId);
if (configUpdate != null) {
Resource resource = configUpdate.getResource();
if (resource != null)
LOG.debug("Resource configuration update [" + configUpdate.getId() + "] for " + resource
+ " completed with status [" + response.getStatus() + "].");
}
/*
* perform the check for completed group updates AFTER completing the individual resource configuration update;
* this will perform the work in two separate transactions, thus ensuring that multiple updates from the same
* group update see each others' results (RHQ-1810)
*/
configurationManager.completeResourceConfigurationUpdate(response);
configurationManager.checkForCompletedGroupResourceConfigurationUpdate(configUpdateId);
}
@Override
public void persistUpdatedResourceConfiguration(int resourceId, Configuration resourceConfiguration) {
ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
Subject overlord = subjectManager.getOverlord();
ResourceConfigurationUpdate update = configurationManager.persistResourceConfigurationUpdateInNewTransaction(
overlord, resourceId, resourceConfiguration, ConfigurationUpdateStatus.SUCCESS, null, false);
if (update == null) {
LOG.debug("Not persisting Configuration " + resourceConfiguration
+ ", since it is identical to the current revision.");
return;
}
Configuration configuration = update.getConfiguration().deepCopy(false); // clone the config, zeroing out ids
configurationManager.setResourceConfiguration(resourceId, configuration); // now set it as the current config on the Resource
}
@Override
public Configuration persistUpdatedPluginConfiguration(int resourceId, Configuration pluginConfiguration) {
ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
Subject overlord = subjectManager.getOverlord();
PluginConfigurationUpdate update = configurationManager.upgradePluginConfiguration(overlord, resourceId,
pluginConfiguration);
return update.getResource().getPluginConfiguration();
}
}