@Override SecuredWMSLayerInfo createSecuredDecorator(WMSLayerInfo delegate) { return new SecuredWMSLayerInfo(delegate, policy); }
static ResourceInfo unwrap(ResourceInfo info) { if (info instanceof SecuredFeatureTypeInfo) return ((SecuredFeatureTypeInfo) info).unwrap(ResourceInfo.class); if (info instanceof SecuredCoverageInfo) return ((SecuredCoverageInfo) info).unwrap(ResourceInfo.class); if (info instanceof SecuredWMSLayerInfo) return ((SecuredWMSLayerInfo) info).unwrap(ResourceInfo.class); if (info instanceof SecuredWMTSLayerInfo) return ((SecuredWMTSLayerInfo) info).unwrap(ResourceInfo.class); return info; }
@Override public Object secure(Object object, WrapperPolicy policy) { // null safe if (object == null) return null; Class clazz = object.getClass(); // for each supported Info type, log a warning if the object to be secured is already // secured. If this happens, // it could lead to a StackOverflowError if the object is re-wrapped, over time, over and // over agian. if (CoverageInfo.class.isAssignableFrom(clazz)) return new SecuredCoverageInfo(logIfSecured((CoverageInfo) object), policy); else if (CoverageStoreInfo.class.isAssignableFrom(clazz)) return new SecuredCoverageStoreInfo(logIfSecured((CoverageStoreInfo) object), policy); else if (DataStoreInfo.class.isAssignableFrom(clazz)) return new SecuredDataStoreInfo(logIfSecured((DataStoreInfo) object), policy); else if (FeatureTypeInfo.class.isAssignableFrom(clazz)) return new SecuredFeatureTypeInfo(logIfSecured((FeatureTypeInfo) object), policy); else if (LayerInfo.class.isAssignableFrom(clazz)) return new SecuredLayerInfo(logIfSecured((LayerInfo) object), policy); else if (WMSLayerInfo.class.isAssignableFrom(clazz)) return new SecuredWMSLayerInfo(logIfSecured((WMSLayerInfo) object), policy); else if (WMTSLayerInfo.class.isAssignableFrom(clazz)) return new SecuredWMTSLayerInfo(logIfSecured((WMTSLayerInfo) object), policy); else throw new IllegalArgumentException("Don't know how to wrap " + object); } /**
@Test public void testUnwrapping() { // we create a mock a policy without defining any behavior since it will not be used WrapperPolicy policy = createNiceMock(WrapperPolicy.class); // test that a secured coverage info info is correctly unwrapped to a coverage info assertThat( SecureCatalogImpl.unwrap(new SecuredCoverageInfo(arcGrid, policy)), not(instanceOf(SecuredCoverageInfo.class))); // test that a secured feature info info is correctly unwrapped to a feature info assertThat( SecureCatalogImpl.unwrap(new SecuredFeatureTypeInfo(states, policy)), not(instanceOf(SecuredFeatureTypeInfo.class))); // test that a secured WMS layer info info is correctly unwrapped to a WMS layer info assertThat( SecureCatalogImpl.unwrap(new SecuredWMSLayerInfo(cascaded, policy)), not(instanceOf(SecuredWMSLayerInfo.class))); // test that a secured WMTS layer info info is correctly unwrapped to a WMTS layer info assertThat( SecureCatalogImpl.unwrap(new SecuredWMTSLayerInfo(cascadedWmts, policy)), not(instanceOf(SecuredWMTSLayerInfo.class))); }
@Test public void testSettingResourceOnSecureLayerInfo() { // we create a mock a policy without defining any behavior since it will not be used WrapperPolicy policy = createNiceMock(WrapperPolicy.class); // testing for coverages LayerInfo coverageLayerInfo = new LayerInfoImpl(); SecuredLayerInfo secureCoverageLayerInfo = new SecuredLayerInfo(coverageLayerInfo, policy); secureCoverageLayerInfo.setResource(new SecuredCoverageInfo(arcGrid, policy)); assertThat(coverageLayerInfo.getResource(), not(instanceOf(SecuredCoverageInfo.class))); assertThat(coverageLayerInfo.getResource(), instanceOf(CoverageInfo.class)); // testing for features LayerInfo featureLayerInfo = new LayerInfoImpl(); SecuredLayerInfo secureFeatureLayerInfo = new SecuredLayerInfo(featureLayerInfo, policy); secureFeatureLayerInfo.setResource(new SecuredFeatureTypeInfo(states, policy)); assertThat(featureLayerInfo.getResource(), not(instanceOf(SecuredFeatureTypeInfo.class))); assertThat(featureLayerInfo.getResource(), instanceOf(FeatureTypeInfo.class)); // testing for WMS layers LayerInfo wmsLayerInfo = new LayerInfoImpl(); SecuredLayerInfo secureWmsLayerInfo = new SecuredLayerInfo(wmsLayerInfo, policy); secureWmsLayerInfo.setResource(new SecuredWMSLayerInfo(cascaded, policy)); assertThat(wmsLayerInfo.getResource(), not(instanceOf(SecuredWMSLayerInfo.class))); assertThat(wmsLayerInfo.getResource(), instanceOf(WMSLayerInfo.class)); // testing for WMTS layers LayerInfo wmtsLayerInfo = new LayerInfoImpl(); SecuredLayerInfo secureWmtsLayerInfo = new SecuredLayerInfo(wmtsLayerInfo, policy); secureWmtsLayerInfo.setResource(new SecuredWMTSLayerInfo(cascadedWmts, policy)); assertThat(wmtsLayerInfo.getResource(), not(instanceOf(SecuredWMTSLayerInfo.class))); assertThat(wmtsLayerInfo.getResource(), instanceOf(WMTSLayerInfo.class)); }