Esempio n. 1
0
        public bool testSources()
        {
            foreach (Source i in getSources())
            {
                Source source = i;

                //osgGIS.notify(osg.NOTICE) << "Source: \"" << source.getName() << "\":" << std.endl;

                if (source.isIntermediate())
                {
                    // osgGIS.notify(osg.WARN) << "Source is intermediate; skipping." << std.endl;
                    continue;
                }

                object store = null;

                if (source.getType() == Source.SourceType.TYPE_FEATURE)
                {
                    store = Registry.instance().getFeatureStoreFactory().connectToFeatureStore(source.getAbsoluteURI());
                }
                else if (source.getType() == Source.SourceType.TYPE_RASTER)
                {
                    store = Registry.instance().getRasterStoreFactory().connectToRasterStore(source.getAbsoluteURI());
                }

                if (store == null)
                {
                    //osgGIS.notify(osg.WARN) << "*** FAILED TO CONNECT TO " << source.getAbsoluteURI() << std.endl;
                }

                //osgGIS.notify(osg.NOTICE) << std.endl;
            }

            return(true);
        }
Esempio n. 2
0
        protected bool build(Source source, Session session)
        {
            //osgGIS.notice() << "Building source " << source.getName() << std.endl;

            // only need to build intermediate sources.
            if (!source.isIntermediate())
            {
                //osgGIS.info() << "...source " << source.getName() << " does not need building (not intermediate)." << std.endl;
                return(true);
            }

            Source parent = source.getParentSource();

            if (parent == null)
            {
                //osgGIS.warn()  << "...ERROR: No parent source found for intermediate source \"" << source.getName() << "\"" << std.endl;
                return(false);
            }

            // check whether a rebuild is required:
            if (parent.getTimeLastModified() < source.getTimeLastModified())
            {
                //osgGIS.info() << "...source " << source.getName() << " does not need building (newer than parent)." << std.endl;
                return(true);
            }

            // build it's parent first:
            if (!build(parent, session))
            {
                //osgGIS.warn() << "...ERROR: Failed to build source \"" << parent.getName() << "\", parent of source \"" << source.getName() << "\"" << std.endl;
                return(false);
            }

            // validate the existence of a filter graph:
            FilterGraph graph = source.getFilterGraph();

            if (graph == null)
            {
                //osgGIS.warn() << "...ERROR: No filter graph set for intermediate source \"" << source.getName() << "\"" << std.endl;
                return(false);
            }

            // establish a feature layer for the parent source:
            FeatureLayer feature_layer = Registry.instance().createFeatureLayer(parent.getAbsoluteURI());

            if (feature_layer == null)
            {
                //osgGIS.warn() << "...ERROR: Cannot access source \"" << source.getName() << "\"" << std.endl;
                return(false);
            }

            //TODO: should we allow terrains for a source compile?? No. Because we would need to transform
            // the source into terrain SRS space, which we do not want to do until we're building nodes.

            // initialize a source data compiler. we use a temporary session because this source build
            // is unrelated to the current "master" build. If we used the same session, the new feature
            // store would hang around and not get properly closed out for use in the next round.
            Session   temp_session = session.derive();
            FilterEnv source_env   = temp_session.createFilterEnv();

            FeatureStoreCompiler compiler = new FeatureStoreCompiler(feature_layer, graph);

            if (!compiler.compile(source.getAbsoluteURI(), source_env))
            {
                //osgGIS.warn() << "...ERROR: failure compiling source \"" << source.getName() << "\"" << std.endl;
                return(false);
            }

            //osgGIS.notice() << "...done compiling source \"" << source.getName() << "\"" << std.endl;

            return(true);
        }