Example #1
0
  public static void main(String[] args) {
    Catalog catalog = new Catalog();
    catalog.add(new Book("Author1", "Title1", 14.55, new Date()));
    catalog.add(new Book("Author2", "Title2", 66, new Date()));

    try {
      File file = new File("src\\res\\output.xml");
      JAXBContext jaxbContext = JAXBContext.newInstance(Catalog.class);
      Marshaller marshaller = jaxbContext.createMarshaller();

      // читабельное форматирование
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

      // пишем в файл
      marshaller.marshal(catalog, file);
      marshaller.marshal(catalog, System.out);

      // читаем из файла
      Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
      catalog = (Catalog) unmarshaller.unmarshal(file);
      System.out.println(catalog);
    } catch (JAXBException e) {
      e.printStackTrace();
    }
  }
Example #2
0
  @Test
  public void testDropCoverageStore() throws Exception {
    // build the store
    Catalog cat = getCatalog();
    CatalogBuilder cb = new CatalogBuilder(cat);
    CoverageStoreInfo store = cb.buildCoverageStore("dem");
    store.setURL(MockData.class.getResource("tazdem.tiff").toExternalForm());
    store.setType("GeoTIFF");
    cat.add(store);

    // build the coverage
    cb.setStore(store);
    CoverageInfo ci = cb.buildCoverage();
    cat.add(ci);

    // build the layer
    LayerInfo layer = cb.buildLayer(ci);
    cat.add(layer);

    // grab a reader just to inizialize the code
    ci.getGridCoverage(null, null);
    ci.getGridCoverageReader(null, GeoTools.getDefaultHints());

    // now drop the store
    CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(cat);
    visitor.visit(store);

    // and reload (GEOS-4782 -> BOOM!)
    getGeoServer().reload();
  }
  @Test
  public void testWorkspaceRemoveAndReadd() {
    // remove all workspaces
    Catalog catalog = getCatalog();
    NamespaceInfo defaultNamespace = catalog.getDefaultNamespace();
    WorkspaceInfo defaultWs = catalog.getDefaultWorkspace();
    List<WorkspaceInfo> workspaces = catalog.getWorkspaces();
    CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog);
    for (WorkspaceInfo ws : workspaces) {
      visitor.visit(ws);
    }
    assertEquals(0, catalog.getWorkspaces().size());
    assertEquals(0, catalog.getNamespaces().size());

    // add back one (this would NPE)
    catalog.add(defaultNamespace);
    catalog.add(defaultWs);
    assertEquals(1, catalog.getWorkspaces().size());
    assertEquals(1, catalog.getNamespaces().size());

    // get back by name (this would NPE too)
    assertNotNull(catalog.getNamespaceByURI(defaultNamespace.getURI()));
  }
  @Test
  public void testCascadeDeleteWorkspaceSpecific() throws Exception {
    Catalog catalog = getCatalog();
    WorkspaceInfo ws = catalog.getWorkspaceByName(MockData.ROAD_SEGMENTS.getPrefix());

    // create a workspace specific group
    CatalogBuilder cb = new CatalogBuilder(catalog);
    LayerGroupInfo lg = catalog.getFactory().createLayerGroup();
    lg.getLayers().add(catalog.getLayerByName(getLayerId(MockData.ROAD_SEGMENTS)));
    lg.getLayers().add(catalog.getLayerByName(getLayerId(MockData.STREAMS)));
    cb.calculateLayerGroupBounds(lg);
    lg.setName("test-lg");
    lg.setWorkspace(ws);
    catalog.add(lg);

    // make a style a workspace specific
    StyleInfo style = catalog.getStyleByName(MockData.ROAD_SEGMENTS.getLocalPart());
    style.setWorkspace(ws);
    catalog.save(style);

    // check we are getting the groups and styles reported properly
    CascadeRemovalReporter reporter = new CascadeRemovalReporter(catalog);
    ws.accept(reporter);
    List<StyleInfo> styles = reporter.getObjects(StyleInfo.class, ModificationType.DELETE);
    assertEquals(1, styles.size());
    assertEquals(style, styles.get(0));

    List<LayerGroupInfo> groups =
        reporter.getObjects(LayerGroupInfo.class, ModificationType.DELETE);
    assertEquals(1, groups.size());
    assertEquals(lg, groups.get(0));

    // now remove for real
    CascadeDeleteVisitor remover = new CascadeDeleteVisitor(catalog);
    ws.accept(remover);
    assertNull(catalog.getWorkspaceByName(ws.getName()));
    assertNull(catalog.getStyleByName(style.getName()));
    assertNull(catalog.getLayerGroupByName(lg.getName()));
  }
Example #5
0
  @Test
  public void testAttributeCache() throws Exception {
    final Catalog catalog = getCatalog();
    ResourcePool pool = ResourcePool.create(catalog);

    // clean up the lakes type
    FeatureTypeInfo oldInfo =
        catalog.getFeatureTypeByName(
            MockData.LAKES.getNamespaceURI(), MockData.LAKES.getLocalPart());
    List<LayerInfo> layers = catalog.getLayers(oldInfo);
    for (LayerInfo layerInfo : layers) {
      catalog.remove(layerInfo);
    }
    catalog.remove(oldInfo);

    // rebuild as new
    CatalogBuilder builder = new CatalogBuilder(catalog);
    builder.setStore(
        catalog.getStoreByName(MockData.CITE_PREFIX, MockData.CITE_PREFIX, DataStoreInfo.class));
    FeatureTypeInfo info =
        builder.buildFeatureType(
            new NameImpl(MockData.LAKES.getNamespaceURI(), MockData.LAKES.getLocalPart()));

    // non persisted state, caching should not occurr
    List<AttributeTypeInfo> att1 = pool.getAttributes(info);
    List<AttributeTypeInfo> att2 = pool.getAttributes(info);
    assertNotSame(att1, att2);
    assertEquals(att1, att2);

    // save it, making it persistent
    catalog.add(info);

    // first check caching actually works against persisted type infos
    List<AttributeTypeInfo> att3 = pool.getAttributes(info);
    List<AttributeTypeInfo> att4 = pool.getAttributes(info);
    assertSame(att3, att4);
    assertNotSame(att1, att3);
    assertEquals(att1, att3);
  }
  @Test
  public void modificationProxySerializeTest() throws Exception {
    Catalog catalog = getCatalog();

    // workspace
    WorkspaceInfo ws = catalog.getWorkspaceByName(MockData.CITE_PREFIX);
    WorkspaceInfo ws2 = serialize(ws);
    assertSame(ModificationProxy.unwrap(ws), ModificationProxy.unwrap(ws2));

    // namespace
    NamespaceInfo ns = catalog.getNamespaceByPrefix(MockData.CITE_PREFIX);
    NamespaceInfo ns2 = serialize(ns);
    assertSame(ModificationProxy.unwrap(ns), ModificationProxy.unwrap(ns2));

    // data store and related objects
    DataStoreInfo ds = catalog.getDataStoreByName(MockData.CITE_PREFIX);
    DataStoreInfo ds2 = serialize(ds);
    assertSame(ModificationProxy.unwrap(ds), ModificationProxy.unwrap(ds2));
    assertSame(
        ModificationProxy.unwrap(ds.getWorkspace()), ModificationProxy.unwrap(ds2.getWorkspace()));

    // coverage store and related objects
    CoverageStoreInfo cs = catalog.getCoverageStoreByName(MockData.TASMANIA_DEM.getLocalPart());
    CoverageStoreInfo cs2 = serialize(cs);
    assertSame(ModificationProxy.unwrap(cs), ModificationProxy.unwrap(cs2));
    assertSame(
        ModificationProxy.unwrap(cs.getWorkspace()), ModificationProxy.unwrap(cs2.getWorkspace()));

    // feature type and related objects
    FeatureTypeInfo ft = catalog.getFeatureTypeByName(getLayerId(MockData.BRIDGES));
    FeatureTypeInfo ft2 = serialize(ft);
    assertSame(ModificationProxy.unwrap(ft), ModificationProxy.unwrap(ft2));
    assertSame(ModificationProxy.unwrap(ft.getStore()), ModificationProxy.unwrap(ft2.getStore()));

    // coverage and related objects
    CoverageInfo ci = catalog.getCoverageByName(getLayerId(MockData.TASMANIA_DEM));
    CoverageInfo ci2 = serialize(ci);
    assertSame(ModificationProxy.unwrap(ci), ModificationProxy.unwrap(ci2));
    assertSame(ModificationProxy.unwrap(ci.getStore()), ModificationProxy.unwrap(ci.getStore()));

    // style
    StyleInfo streamsStyle = catalog.getStyleByName("Streams");
    StyleInfo si2 = serialize(streamsStyle);
    assertSame(ModificationProxy.unwrap(streamsStyle), ModificationProxy.unwrap(si2));

    // layer and related objects
    LayerInfo li = catalog.getLayerByName(getLayerId(MockData.BRIDGES));
    // ... let's add an extra style

    li.getStyles().add(streamsStyle);
    catalog.save(li);
    LayerInfo li2 = serialize(li);
    assertSame(ModificationProxy.unwrap(li), ModificationProxy.unwrap(li2));
    assertSame(
        ModificationProxy.unwrap(li.getResource()), ModificationProxy.unwrap(li2.getResource()));
    assertSame(
        ModificationProxy.unwrap(li.getDefaultStyle()),
        ModificationProxy.unwrap(li2.getDefaultStyle()));
    assertSame(
        ModificationProxy.unwrap(li.getStyles().iterator().next()),
        ModificationProxy.unwrap(li2.getStyles().iterator().next()));

    // try a group layer
    CatalogBuilder cb = new CatalogBuilder(catalog);
    LayerGroupInfo lg = catalog.getFactory().createLayerGroup();
    lg.getLayers().add(catalog.getLayerByName(getLayerId(MockData.ROAD_SEGMENTS)));
    lg.getLayers().add(catalog.getLayerByName(getLayerId(MockData.PONDS)));
    cb.calculateLayerGroupBounds(lg);
    lg.setName("test-lg");
    catalog.add(lg);
    // ... make sure we get a proxy
    lg = catalog.getLayerGroupByName("test-lg");
    if (lg instanceof SecuredLayerGroupInfo) {
      lg = ((SecuredLayerGroupInfo) lg).unwrap(LayerGroupInfo.class);
    }
    LayerGroupInfo lg2 = serialize(lg);
    assertSame(ModificationProxy.unwrap(lg), ModificationProxy.unwrap(lg2));
    assertSame(
        ModificationProxy.unwrap(lg.getLayers().get(0)),
        ModificationProxy.unwrap(lg2.getLayers().get(0)));
    assertSame(
        ModificationProxy.unwrap(lg.getLayers().get(1)),
        ModificationProxy.unwrap(lg2.getLayers().get(1)));

    // now check a half modified proxy
    LayerInfo lim = catalog.getLayerByName(getLayerId(MockData.BRIDGES));
    // ... let's add an extra style
    lim.setDefaultStyle(streamsStyle);
    lim.getStyles().add(streamsStyle);
    // clone and check
    LayerInfo lim2 = serialize(lim);
    assertSame(
        ModificationProxy.unwrap(lim.getDefaultStyle()),
        ModificationProxy.unwrap(lim2.getDefaultStyle()));
    assertSame(
        ModificationProxy.unwrap(lim.getStyles().iterator().next()),
        ModificationProxy.unwrap(lim2.getStyles().iterator().next()));

    // mess a bit with the metadata map too
    String key = "workspaceKey";
    lim.getMetadata().put(key, ws);
    LayerInfo lim3 = serialize(lim);
    assertSame(ModificationProxy.unwrap(lim), ModificationProxy.unwrap(lim3));
    assertSame(
        ModificationProxy.unwrap(lim.getMetadata().get(key)),
        ModificationProxy.unwrap(lim3.getMetadata().get(key)));
  }