/**
   * Reads all the common attributes from the service info class.
   *
   * <p>This method is intended to be called by subclasses after creating an instance of
   * ServiceInfo. Example:
   *
   * <pre>
   *   // read properties
   *   Map<String,Object> props = reader.wfs();
   *
   *   // create config object
   *   WFSInfo wfs = new WFSInfoImpl();
   *
   *   //load common properties
   *   load( wfs, reader );
   *
   *   //load wfs specific properties
   *   wfs.setServiceLevel( map.get( "serviceLevel") );
   *   ...
   * </pre>
   */
  protected void readCommon(ServiceInfo service, Map<String, Object> properties, GeoServer gs)
      throws Exception {

    service.setEnabled((Boolean) properties.get("enabled"));
    service.setName((String) properties.get("name"));
    service.setTitle((String) properties.get("title"));
    service.setAbstract((String) properties.get("abstract"));

    Map metadataLink = (Map) properties.get("metadataLink");
    if (metadataLink != null) {
      MetadataLinkInfo ml = gs.getCatalog().getFactory().createMetadataLink();
      ml.setAbout((String) metadataLink.get("about"));
      ml.setMetadataType((String) metadataLink.get("metadataType"));
      ml.setType((String) metadataLink.get("type"));
      service.setMetadataLink(ml);
    }

    List<String> keywords = (List<String>) properties.get("keywords");
    if (keywords != null) {
      for (String kw : keywords) {
        service.getKeywords().add(new Keyword(kw));
      }
    }

    service.setOnlineResource((String) properties.get("onlineResource"));
    service.setFees((String) properties.get("fees"));
    service.setAccessConstraints((String) properties.get("accessConstraints"));
    service.setCiteCompliant((Boolean) properties.get("citeConformanceHacks"));
    service.setMaintainer((String) properties.get("maintainer"));
    service.setSchemaBaseURL((String) properties.get("SchemaBaseUrl"));
  }
  @Test
  public void testMetadataLink() throws Exception {
    Catalog catalog = getCatalog();
    CoverageInfo ci = catalog.getCoverageByName(getLayerId(TASMANIA_DEM));
    MetadataLinkInfo ml = catalog.getFactory().createMetadataLink();
    ml.setContent("http://www.geoserver.org/tasmania/dem.xml");
    ml.setAbout("http://www.geoserver.org");
    ci.getMetadataLinks().add(ml);
    catalog.save(ci);

    Document dom = getAsDOM("wcs?request=GetCapabilities");
    // print(dom);
    checkValidationErrors(dom, WCS11_SCHEMA);
    String xpathBase =
        "//wcs:CoverageSummary[wcs:Identifier = '"
            + TASMANIA_DEM.getLocalPart()
            + "']/ows:Metadata";
    assertXpathEvaluatesTo("http://www.geoserver.org", xpathBase + "/@about", dom);
    assertXpathEvaluatesTo("simple", xpathBase + "/@xlink:type", dom);
    assertXpathEvaluatesTo(
        "http://www.geoserver.org/tasmania/dem.xml", xpathBase + "/@xlink:href", dom);
  }