blob: 35aa20d2d9a475fe8e33b170e5b1b7fff60d232e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2017 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.api.tools.internal.search;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.api.tools.internal.provisional.search.IMetadata;
import org.eclipse.pde.api.tools.internal.util.Util;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import com.ibm.icu.text.DateFormat;
/**
* Implementation of {@link IMetadata} for API Use Scan problem report
*/
public class MissingRefMetadata implements IMetadata {
/**
* XML tag name for Profile
*/
public static final String PROFILE = "profile"; //$NON-NLS-1$
/**
* XML tag name for the date the scan was run
*/
public static final String RUNATDATE = "runatdate"; //$NON-NLS-1$
/**
* XML tag name for the report location
*/
public static final String REPORTLOCATION = "reportlocation"; //$NON-NLS-1$
/**
* XML tag name for api use scan list
*/
public static final String APIUUSESCANS = "apiusescans"; //$NON-NLS-1$
/**
* XML tag name for the value
*/
public static final String VALUE = "value"; //$NON-NLS-1$
/**
* Root tag for the metadata file
*/
public static final String METADATA = "metadata"; //$NON-NLS-1$
private String profile = null;
private String runatdate = null;
private String reportlocation = null;
private String apiusescans = null;
/**
* Constructor
*/
public MissingRefMetadata() {
// create an empty metadata object
}
/**
* Constructor
*
* @param profile
* @param runatdate
* @param reportlocation
* @param scopepattern
* @param refpattern
* @param apiusescans
*/
public MissingRefMetadata(String profile, String reportlocation, String apiusescans) {
this.profile = profile;
this.runatdate = DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
this.reportlocation = reportlocation;
this.apiusescans = apiusescans;
}
/**
* Returns the use metadata from meta.xml
*
* @return
* @throws Exception
*/
public static MissingRefMetadata getMetadata(File xmlFile) throws Exception {
MissingRefMetadata metadata = new MissingRefMetadata();
try {
if (xmlFile.exists()) {
String xmlstr = Util.getFileContentAsString(xmlFile);
Element doc = Util.parseDocument(xmlstr.trim());
Element element = null;
String value = null, name = null;
NodeList nodes = doc.getElementsByTagName("*"); //$NON-NLS-1$
for (int i = 0; i < nodes.getLength(); i++) {
element = (Element) nodes.item(i);
value = element.getAttribute(MissingRefMetadata.VALUE);
name = element.getNodeName();
if (PROFILE.equals(name)) {
metadata.setProfile(value);
continue;
}
if (RUNATDATE.equals(name)) {
metadata.setRunAtDate(value);
continue;
}
if (REPORTLOCATION.equals(name)) {
metadata.setReportLocation(value);
continue;
}
if (APIUUSESCANS.equals(name)) {
metadata.setApiUseScans(value);
continue;
}
}
}
} catch (CoreException e) {
throw new Exception(NLS.bind(SearchMessages.MissingRefMetadata_CoreExceptionInParsing, xmlFile.getAbsolutePath()));
}
return metadata;
}
@Override
public void serializeToFile(File file) throws IOException, CoreException {
BufferedWriter writer = null;
try {
Document doc = Util.newDocument();
Element root = doc.createElement(MissingRefMetadata.METADATA);
doc.appendChild(root);
Element child = doc.createElement(MissingRefMetadata.PROFILE);
root.appendChild(child);
child.setAttribute(MissingRefMetadata.VALUE, profile);
child = doc.createElement(MissingRefMetadata.RUNATDATE);
root.appendChild(child);
child.setAttribute(MissingRefMetadata.VALUE, runatdate);
child = doc.createElement(MissingRefMetadata.REPORTLOCATION);
root.appendChild(child);
child.setAttribute(MissingRefMetadata.VALUE, reportlocation);
child = doc.createElement(MissingRefMetadata.APIUUSESCANS);
root.appendChild(child);
child.setAttribute(MissingRefMetadata.VALUE, apiusescans);
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8));
writer.write(Util.serializeDocument(doc));
writer.flush();
} finally {
if (writer != null) {
writer.close();
}
}
}
/**
* Allows the profile to be set. This method accepts <code>null</code>
*
* @param profile the profile to set
*/
public void setProfile(String profile) {
this.profile = profile;
}
/**
* Returns the profile set in this metadata or <code>null</code> if none.
*
* @return the profile
*/
public String getProfile() {
return profile;
}
/**
* Allows the run-at date to be set. This method accepts <code>null</code>
*
* @param date the date to set
*/
public void setRunAtDate(String date) {
this.runatdate = date;
}
/**
* Returns the run-at date set in this metadata or <code>null</code> if
* none.
*
* @return the run-at date or <code>null</code>
*/
public String getRunAtDate() {
return this.runatdate;
}
/**
* Returns the report location set in this metadata or <code>null</code> if
* none.
*
* @return the report location or <code>null</code>
*/
public String getReportLocation() {
return this.reportlocation;
}
/**
* Allows the report location to be set. This method accepts
* <code>null</code>.
*
* @param location the new report location
*/
public void setReportLocation(String location) {
this.reportlocation = location;
}
/**
* Returns the API Use Scans set in this metadata or <code>null</code> if
* none.
*
* @return the apiusescans
*/
public String getApiUseScans() {
return apiusescans;
}
/**
* Allows the API Use Scan to be set. This method accepts <code>null</code>
*
* @param apiusescans the apiusescans to set
*/
public void setApiUseScans(String apiusescans) {
this.apiusescans = apiusescans;
}
}