be.fgov.kszbcss.rhq.websphere.component.j2ee.SpecVersionMeasurementHandler.java Source code

Java tutorial

Introduction

Here is the source code for be.fgov.kszbcss.rhq.websphere.component.j2ee.SpecVersionMeasurementHandler.java

Source

/*
 * RHQ WebSphere Plug-in
 * Copyright (C) 2012 Crossroads Bank for Social Security
 * 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, version 2, as
 * published by the Free Software Foundation, and/or the GNU Lesser
 * General Public License, version 2.1, also as published by the Free
 * Software Foundation.
 *
 * 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 and the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU General Public License
 * and the GNU Lesser General Public License along with this program;
 * if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
package be.fgov.kszbcss.rhq.websphere.component.j2ee;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.measurement.MeasurementReport;
import org.rhq.core.domain.measurement.MeasurementScheduleRequest;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;

import com.ibm.websphere.management.exception.ConnectorException;

import be.fgov.kszbcss.rhq.websphere.config.ConfigQueryException;
import be.fgov.kszbcss.rhq.websphere.process.WebSphereServer;
import be.fgov.kszbcss.rhq.websphere.support.measurement.MeasurementHandler;

public abstract class SpecVersionMeasurementHandler implements MeasurementHandler {
    private static final Log log = LogFactory.getLog(SpecVersionMeasurementHandler.class);

    protected abstract Document getDeploymentDescriptor()
            throws InterruptedException, ConnectorException, ConfigQueryException;

    protected abstract Pattern[] getPublicIdPatterns();

    public final void getValue(WebSphereServer server, MeasurementReport report, MeasurementScheduleRequest request)
            throws InterruptedException, ConnectorException, ConfigQueryException {
        Document document = getDeploymentDescriptor();
        if (document != null) {
            DocumentType docType = document.getDoctype();
            String version = null;
            if (docType != null) {
                String publicId = docType.getPublicId();
                if (log.isDebugEnabled()) {
                    log.debug("Public ID: " + publicId);
                }
                for (Pattern pattern : getPublicIdPatterns()) {
                    Matcher matcher = pattern.matcher(publicId);
                    if (matcher.matches()) {
                        version = matcher.group(1);
                        if (log.isDebugEnabled()) {
                            log.debug("Public ID matches pattern; version=" + version);
                        }
                        break;
                    }
                }
                if (version == null) {
                    log.warn("Unexpected public ID found in application.xml deployment descriptor: " + publicId);
                }
            }
            if (version == null) {
                version = document.getDocumentElement().getAttribute("version");
            }
            report.addData(new MeasurementDataTrait(request, version));
        }
    }
}