publish style to workspace raw, preserve attribute order, removed recursion problem

This commit is contained in:
Tobias Warneke 2017-04-06 07:44:07 +02:00
parent a4268dda60
commit 3decadc243
5 changed files with 855 additions and 668 deletions

View File

@ -489,6 +489,14 @@ public class GeoServerRESTPublisher {
/** /**
* @since GeoServer 2.2 * @since GeoServer 2.2
* @see GeoServerRESTStyleManager#
*/
public boolean publishStyleInWorkspace(String workspace, String sldBody, String name, boolean raw) throws IllegalArgumentException {
return styleManager.publishStyleInWorkspace(workspace, sldBody, name, raw);
}
/**
* @since GeoServer 2.2
* @see GeoServerRESTStyleManager#publishStyleInWorkspace(java.lang.String, java.io.File) * @see GeoServerRESTStyleManager#publishStyleInWorkspace(java.lang.String, java.io.File)
*/ */
public boolean publishStyleInWorkspace(String workspace, File sldFile) { public boolean publishStyleInWorkspace(String workspace, File sldFile) {
@ -505,6 +513,14 @@ public class GeoServerRESTPublisher {
/** /**
* @since GeoServer 2.2 * @since GeoServer 2.2
* @see GeoServerRESTStyleManager#publishStyleInWorkspace(java.lang.String, java.io.File, java.lang.String)
*/
public boolean publishStyleInWorkspace(String workspace, File sldFile, String name, boolean raw) {
return styleManager.publishStyleInWorkspace(workspace, sldFile, name, raw);
}
/**
* @since GeoServer 2.2
* @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.lang.String, java.lang.String) * @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.lang.String, java.lang.String)
*/ */
public boolean updateStyleInWorkspace(String workspace, String sldBody, String name) throws IllegalArgumentException { public boolean updateStyleInWorkspace(String workspace, String sldBody, String name) throws IllegalArgumentException {
@ -513,6 +529,14 @@ public class GeoServerRESTPublisher {
/** /**
* @since GeoServer 2.2 * @since GeoServer 2.2
* @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.lang.String, java.lang.String)
*/
public boolean updateStyleInWorkspace(String workspace, String sldBody, String name, boolean raw) throws IllegalArgumentException {
return styleManager.updateStyleInWorkspace(workspace, sldBody, name, raw);
}
/**
* @since GeoServer 2.2
* @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.io.File, java.lang.String) * @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.io.File, java.lang.String)
*/ */
public boolean updateStyleInWorkspace(String workspace, File sldFile, String name) throws IllegalArgumentException { public boolean updateStyleInWorkspace(String workspace, File sldFile, String name) throws IllegalArgumentException {
@ -521,6 +545,14 @@ public class GeoServerRESTPublisher {
/** /**
* @since GeoServer 2.2 * @since GeoServer 2.2
* @see GeoServerRESTStyleManager#updateStyleInWorkspace(java.lang.String, java.io.File, java.lang.String)
*/
public boolean updateStyleInWorkspace(String workspace, File sldFile, String name, boolean raw) throws IllegalArgumentException {
return styleManager.updateStyleInWorkspace(workspace, sldFile, name, raw);
}
/**
* @since GeoServer 2.2
* @see GeoServerRESTStyleManager#removeStyleInWorkspace(java.lang.String, java.lang.String, boolean) * @see GeoServerRESTStyleManager#removeStyleInWorkspace(java.lang.String, java.lang.String, boolean)
*/ */
public boolean removeStyleInWorkspace(String workspace, String styleName, boolean purge) throws IllegalArgumentException { public boolean removeStyleInWorkspace(String workspace, String styleName, boolean purge) throws IllegalArgumentException {

View File

@ -37,6 +37,7 @@ import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder
import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo; import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo;
import it.geosolutions.geoserver.rest.encoder.utils.NestedElementEncoder; import it.geosolutions.geoserver.rest.encoder.utils.NestedElementEncoder;
import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
import java.util.LinkedHashMap;
/** /**
* Layer encoder for Geoserver = 2.1 * Layer encoder for Geoserver = 2.1
@ -102,7 +103,7 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
*/ */
public void addAuthorityURL(GSAuthorityURLInfoEncoder authorityURLInfo){ public void addAuthorityURL(GSAuthorityURLInfoEncoder authorityURLInfo){
if(authorityURLList == null){ if(authorityURLList == null){
authorityURLList = new HashMap<String,String>(); authorityURLList = new LinkedHashMap<String,String>();
} }
authorityURLList.put(authorityURLInfo.getHref(), authorityURLInfo.getName()); authorityURLList.put(authorityURLInfo.getHref(), authorityURLInfo.getName());
String jsonStr = ""; String jsonStr = "";
@ -152,7 +153,7 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
*/ */
public void addIdentifier(GSIdentifierInfoEncoder identifierInfo){ public void addIdentifier(GSIdentifierInfoEncoder identifierInfo){
if(identifierList == null){ if(identifierList == null){
identifierList = new HashMap<String,List<String>>(); identifierList = new LinkedHashMap<String,List<String>>();
} }
String authority = identifierInfo.getAuthority(); String authority = identifierInfo.getAuthority();

View File

@ -71,6 +71,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
/** /**
* Check if a Style exists in the configured GeoServer instance. * Check if a Style exists in the configured GeoServer instance.
*
* @param name the name of the style to check for. * @param name the name of the style to check for.
* @return <TT>true</TT> on HTTP 200, <TT>false</TT> on HTTP 404 * @return <TT>true</TT> on HTTP 200, <TT>false</TT> on HTTP 404
* @throws RuntimeException if any other HTTP code than 200 or 404 was retrieved. * @throws RuntimeException if any other HTTP code than 200 or 404 was retrieved.
@ -80,7 +81,9 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
} }
/** /**
* Check if a Style exists in the configured GeoServer instance. User can choose if log a possible exception or not * Check if a Style exists in the configured GeoServer instance. User can choose if log a
* possible exception or not
*
* @param name the name of the style to check for. * @param name the name of the style to check for.
* @param quietOnNotFound if true, mute exception if false is returned * @param quietOnNotFound if true, mute exception if false is returned
* @return <TT>true</TT> on HTTP 200, <TT>false</TT> on HTTP 404 * @return <TT>true</TT> on HTTP 200, <TT>false</TT> on HTTP 404
@ -128,11 +131,9 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return HTTPUtils.get(url, gsuser, gspass); return HTTPUtils.get(url, gsuser, gspass);
} }
//========================================================================= //=========================================================================
// Workspaces // Workspaces
//========================================================================= //=========================================================================
/** /**
* *
* @since GeoServer 2.2 * @since GeoServer 2.2
@ -183,6 +184,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
/** /**
* Get the SLD body of a Style. * Get the SLD body of a Style.
*
* @since GeoServer 2.2 * @since GeoServer 2.2
*/ */
public String getSLD(String workspace, String name) { public String getSLD(String workspace, String name) {
@ -196,7 +198,6 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
//========================================================================= //=========================================================================
// Publishing // Publishing
//========================================================================= //=========================================================================
/** /**
* Store and publish a Style. * Store and publish a Style.
* *
@ -275,8 +276,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
} }
/** /**
* Store and publish a Style, assigning it a name and choosing the raw * Store and publish a Style, assigning it a name and choosing the raw format.
* format.
* *
* @param sldBody the full SLD document as a String. * @param sldBody the full SLD document as a String.
* @param name the Style name. * @param name the Style name.
@ -307,8 +307,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
} }
/** /**
* Store and publish a Style, assigning it a name and choosing the raw * Store and publish a Style, assigning it a name and choosing the raw format.
* format.
* *
* @param sldFile the File containing the SLD document. * @param sldFile the File containing the SLD document.
* @param name the Style name. * @param name the Style name.
@ -472,20 +471,21 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
*/ */
public boolean removeStyle(String styleName, final boolean purge) public boolean removeStyle(String styleName, final boolean purge)
throws IllegalArgumentException { throws IllegalArgumentException {
if (styleName == null || styleName.isEmpty()) if (styleName == null || styleName.isEmpty()) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Check styleName parameter, it may never be null or empty"); "Check styleName parameter, it may never be null or empty");
}
// check style name // check style name
// TODO may we want to throw an exception instead of // TODO may we want to throw an exception instead of
// change style name? // change style name?
if(styleName.contains(":")) if (styleName.contains(":")) {
LOGGER.warn("Style name is going to be changed [" + styleName + "]"); LOGGER.warn("Style name is going to be changed [" + styleName + "]");
}
styleName = styleName.replaceAll(":", "_"); styleName = styleName.replaceAll(":", "_");
// currently REST interface does't support URLencoded URL // currently REST interface does't support URLencoded URL
// styleName = URLEncoder.encode(styleName); // styleName = URLEncoder.encode(styleName);
String sUrl = buildUrl(null, styleName, null); String sUrl = buildUrl(null, styleName, null);
if (purge) { if (purge) {
sUrl += "?purge=true"; sUrl += "?purge=true";
@ -517,7 +517,6 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
//========================================================================= //=========================================================================
// Publishing in workspace // Publishing in workspace
//========================================================================= //=========================================================================
/** /**
* Store and publish a Style. * Store and publish a Style.
* *
@ -528,7 +527,7 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
*/ */
public boolean publishStyleInWorkspace(final String workspace, String sldBody) { public boolean publishStyleInWorkspace(final String workspace, String sldBody) {
try { try {
return publishStyleInWorkspace(workspace, sldBody); return publishStyleInWorkspace(workspace, sldBody, null);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
if (LOGGER.isErrorEnabled()) { if (LOGGER.isErrorEnabled()) {
LOGGER.error(e.getLocalizedMessage(), e); LOGGER.error(e.getLocalizedMessage(), e);
@ -558,6 +557,28 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return result != null; return result != null;
} }
/**
* Store and publish a Style, assigning it a name.
*
* @param sldBody the full SLD document as a String.
* @param name the Style name.
*
* @return <TT>true</TT> if the operation completed successfully.
* @throws IllegalArgumentException if the style body is null or empty.
* @since GeoServer 2.2
*/
public boolean publishStyleInWorkspace(final String workspace, final String sldBody, final String name, boolean raw)
throws IllegalArgumentException {
if (sldBody == null || sldBody.isEmpty()) {
throw new IllegalArgumentException("The style body may not be null or empty");
}
StringBuilder sUrl = new StringBuilder(buildPostUrl(workspace, name));
Util.appendParameter(sUrl, "raw", "" + raw);
final String result = HTTPUtils.post(sUrl.toString(), sldBody, "application/vnd.ogc.sld+xml", gsuser, gspass);
return result != null;
}
/** /**
* Store and publish a Style. * Store and publish a Style.
* *
@ -586,6 +607,23 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return result != null; return result != null;
} }
/**
* Store and publish a Style, assigning it a name.
*
* @param sldFile the File containing the SLD document.
* @param name the Style name.
*
* @return <TT>true</TT> if the operation completed successfully.
* @since GeoServer 2.2
*/
public boolean publishStyleInWorkspace(final String workspace, File sldFile, String name, boolean raw) {
StringBuilder sUrl = new StringBuilder(buildPostUrl(workspace, name));
Util.appendParameter(sUrl, "raw", "" + raw);
LOGGER.debug("POSTing new style " + name + " to " + sUrl);
String result = HTTPUtils.post(sUrl.toString(), sldFile, GeoServerRESTPublisher.Format.SLD.getContentType(), gsuser, gspass);
return result != null;
}
/** /**
* Update a Style. * Update a Style.
* *
@ -611,6 +649,32 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return result != null; return result != null;
} }
/**
* Update a Style.
*
* @param sldBody the new SLD document as a String.
* @param name the Style name to update.
*
* @return <TT>true</TT> if the operation completed successfully.
* @throws IllegalArgumentException if the style body or name are null or empty.
* @since GeoServer 2.2
*/
public boolean updateStyleInWorkspace(final String workspace, final String sldBody, final String name, boolean raw)
throws IllegalArgumentException {
if (sldBody == null || sldBody.isEmpty()) {
throw new IllegalArgumentException("The style body may not be null or empty");
} else if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("The style name may not be null or empty");
}
final StringBuilder sUrl = new StringBuilder(buildUrl(workspace, name, null));
Util.appendParameter(sUrl, "raw", "" + raw);
final String result = HTTPUtils.put(sUrl.toString(), sldBody,
"application/vnd.ogc.sld+xml", gsuser, gspass);
return result != null;
}
/** /**
* Update a Style. * Update a Style.
* *
@ -637,6 +701,33 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return result != null; return result != null;
} }
/**
* Update a Style.
*
* @param sldFile the File containing the SLD document.
* @param name the Style name.
*
* @return <TT>true</TT> if the operation completed successfully.
* @throws IllegalArgumentException if the sldFile file or name are null or name is empty.
* @since GeoServer 2.2
*/
public boolean updateStyleInWorkspace(final String workspace, final File sldFile, final String name, boolean raw)
throws IllegalArgumentException {
if (sldFile == null) {
throw new IllegalArgumentException("Unable to updateStyle using a null parameter file");
} else if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("The style name may not be null or empty");
}
final StringBuilder sUrl = new StringBuilder(buildUrl(workspace, name, null));
Util.appendParameter(sUrl, "raw", "" + raw);
final String result = HTTPUtils.put(sUrl.toString(), sldFile,
"application/vnd.ogc.sld+xml", gsuser, gspass);
return result != null;
}
/** /**
* Remove a Style. * Remove a Style.
* <P> * <P>
@ -651,14 +742,16 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
*/ */
public boolean removeStyleInWorkspace(final String workspace, String styleName, final boolean purge) public boolean removeStyleInWorkspace(final String workspace, String styleName, final boolean purge)
throws IllegalArgumentException { throws IllegalArgumentException {
if (styleName == null || styleName.isEmpty()) if (styleName == null || styleName.isEmpty()) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Check styleName parameter, it may never be null or empty"); "Check styleName parameter, it may never be null or empty");
}
// check style name // check style name
// TODO may we want to throw an exception instead of change style name? // TODO may we want to throw an exception instead of change style name?
if(styleName.contains(":")) if (styleName.contains(":")) {
LOGGER.warn("Style name is going to be changed [" + styleName + "]"); LOGGER.warn("Style name is going to be changed [" + styleName + "]");
}
styleName = styleName.replaceAll(":", "_"); styleName = styleName.replaceAll(":", "_");
styleName = URLEncoder.encode(styleName); styleName = URLEncoder.encode(styleName);
@ -695,9 +788,9 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
//========================================================================= //=========================================================================
// Util methods // Util methods
//========================================================================= //=========================================================================
/** /**
* Creates a URL for the given stylename with the name in querystring * Creates a URL for the given stylename with the name in querystring
*
* @param workspace nullable workspace name * @param workspace nullable workspace name
* @param name style name * @param name style name
* @return * @return
@ -705,8 +798,9 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
protected String buildPostUrl(final String workspace, String name) { protected String buildPostUrl(final String workspace, String name) {
StringBuilder sUrl = new StringBuilder(gsBaseUrl.toString()).append("/rest"); StringBuilder sUrl = new StringBuilder(gsBaseUrl.toString()).append("/rest");
if(workspace != null) if (workspace != null) {
sUrl.append("/workspaces/").append(workspace); sUrl.append("/workspaces/").append(workspace);
}
sUrl.append("/styles"); sUrl.append("/styles");
if (name != null && !name.isEmpty()) { if (name != null && !name.isEmpty()) {
@ -715,13 +809,13 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
return sUrl.toString(); return sUrl.toString();
} }
protected String buildXmlUrl(final String workspace, final String name) { protected String buildXmlUrl(final String workspace, final String name) {
return buildUrl(workspace, name, ".xml"); return buildUrl(workspace, name, ".xml");
} }
/** /**
* Creates a URL for the given stylename with the name in the REST path * Creates a URL for the given stylename with the name in the REST path
*
* @param workspace nullable workspace name * @param workspace nullable workspace name
* @param name style name * @param name style name
* @param ext nullable output extension (e.g. ".xml" ".sld") * @param ext nullable output extension (e.g. ".xml" ".sld")
@ -729,13 +823,15 @@ public class GeoServerRESTStyleManager extends GeoServerRESTAbstractManager {
protected String buildUrl(final String workspace, final String name, final String ext) { protected String buildUrl(final String workspace, final String name, final String ext) {
StringBuilder sUrl = new StringBuilder(gsBaseUrl.toString()).append("/rest"); StringBuilder sUrl = new StringBuilder(gsBaseUrl.toString()).append("/rest");
if(workspace != null) if (workspace != null) {
sUrl.append("/workspaces/").append(workspace); sUrl.append("/workspaces/").append(workspace);
}
sUrl.append("/styles/").append(URLEncoder.encode(name)); sUrl.append("/styles/").append(URLEncoder.encode(name));
if(ext != null) if (ext != null) {
sUrl.append(ext); sUrl.append(ext);
}
return sUrl.toString(); return sUrl.toString();
} }

View File

@ -106,9 +106,9 @@ public class GSLayerEncoder21Test {
String[] kvp1_1 = props1[0].split("\":"); String[] kvp1_1 = props1[0].split("\":");
String[] kvp1_2 = props1[1].split("\":"); String[] kvp1_2 = props1[1].split("\":");
Assert.assertEquals(IdentifierInfo.authority.name(), kvp1_1[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.authority.name(), kvp1_1[0].replace("\"", ""));
Assert.assertEquals("authority2", kvp1_1[1].replace("\"", "")); Assert.assertEquals("authority1", kvp1_1[1].replace("\"", ""));
Assert.assertEquals(IdentifierInfo.identifier.name(), kvp1_2[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.identifier.name(), kvp1_2[0].replace("\"", ""));
Assert.assertEquals("identifier2", kvp1_2[1].replace("\"", "")); Assert.assertEquals("identifier1", kvp1_2[1].replace("\"", ""));
String[] props2 = items[1].split(","); String[] props2 = items[1].split(",");
String[] kvp2_1 = props2[0].split("\":"); String[] kvp2_1 = props2[0].split("\":");
@ -116,15 +116,15 @@ public class GSLayerEncoder21Test {
Assert.assertEquals(IdentifierInfo.authority.name(), kvp2_1[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.authority.name(), kvp2_1[0].replace("\"", ""));
Assert.assertEquals("authority2", kvp2_1[1].replace("\"", "")); Assert.assertEquals("authority2", kvp2_1[1].replace("\"", ""));
Assert.assertEquals(IdentifierInfo.identifier.name(), kvp2_2[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.identifier.name(), kvp2_2[0].replace("\"", ""));
Assert.assertEquals("additionalId", kvp2_2[1].replace("\"", "")); Assert.assertEquals("identifier2", kvp2_2[1].replace("\"", ""));
String[] props3 = items[2].split(","); String[] props3 = items[2].split(",");
String[] kvp3_1 = props3[0].split("\":"); String[] kvp3_1 = props3[0].split("\":");
String[] kvp3_2 = props3[1].split("\":"); String[] kvp3_2 = props3[1].split("\":");
Assert.assertEquals(IdentifierInfo.authority.name(), kvp3_1[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.authority.name(), kvp3_1[0].replace("\"", ""));
Assert.assertEquals("authority1", kvp3_1[1].replace("\"", "")); Assert.assertEquals("authority2", kvp3_1[1].replace("\"", ""));
Assert.assertEquals(IdentifierInfo.identifier.name(), kvp3_2[0].replace("\"", "")); Assert.assertEquals(IdentifierInfo.identifier.name(), kvp3_2[0].replace("\"", ""));
Assert.assertEquals("identifier1", kvp3_2[1].replace("\"", "")); Assert.assertEquals("additionalId", kvp3_2[1].replace("\"", ""));
} }
} }

View File

@ -352,6 +352,64 @@ public class GeoserverRESTStyleTest extends GeoserverRESTTest {
assertEquals(1, reader.getStyles(WORKSPACE).size()); assertEquals(1, reader.getStyles(WORKSPACE).size());
} }
@Test
public void testStylesInWorkspaceRaw() throws IOException {
if (!enabled())
return;
deleteAll();
final String WORKSPACE = "testWorkspace";
final String STYLENAME = "restteststyle";
File sldFile = new ClassPathResource("testdata/restteststyle.sld").getFile();
publisher.createWorkspace(WORKSPACE);
assertEquals(0, reader.getStyles().size());
assertEquals(0, reader.getStyles(WORKSPACE).size());
// insert style
assertTrue(publisher.publishStyleInWorkspace(WORKSPACE, sldFile, null, true));
assertTrue(reader.existsStyle(WORKSPACE, STYLENAME));
assertFalse(reader.existsStyle(STYLENAME));
// insert style again
assertFalse(publisher.publishStyleInWorkspace(WORKSPACE, sldFile, null, true));
assertTrue(reader.existsStyle(WORKSPACE, STYLENAME));
assertFalse(reader.existsStyle(STYLENAME));
String sld = reader.getSLD(WORKSPACE, STYLENAME);
assertNotNull(sld);
RESTStyle style = reader.getStyle(WORKSPACE, STYLENAME);
assertEquals(STYLENAME, style.getName());
assertEquals(WORKSPACE, style.getWorkspace());
Element styleEl = JDOMBuilder.buildElement(sld);
assertNotNull(styleEl);
Namespace SLDNS = Namespace.getNamespace("sld",
"http://www.opengis.net/sld");
try {
assertEquals(STYLENAME, styleEl.getChild("NamedLayer", SLDNS)
.getChild("Name", SLDNS).getText());
assertEquals(
"STYLE FOR TESTING PURPOSES",
styleEl.getChild("NamedLayer", SLDNS)
.getChild("UserStyle", SLDNS)
.getChild("Title", SLDNS).getText());
} catch (NullPointerException npe) {
fail("Error in SLD");
}
// assertEquals(1475, sld.length());
assertEquals(0, reader.getStyles().size());
assertEquals(1, reader.getStyles(WORKSPACE).size());
}
@Test @Test
public void testRemoveStylesInWorkspace() throws IOException { public void testRemoveStylesInWorkspace() throws IOException {
if (!enabled()) if (!enabled())