summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikolai Pretzell <np@openoffice.org>2001-03-23 12:32:07 +0000
committerNikolai Pretzell <np@openoffice.org>2001-03-23 12:32:07 +0000
commit21a80336a238cc315f8a3e481a195d7e156922a2 (patch)
tree83b33e3672280194f4d0aca785317147dd48d45e
parentc62b94519dabf91a6766b7e4e822c0e8c20bd738 (diff)
Program srvdepy for finding dependencies among services.
-rw-r--r--xml2cmp/source/finder/dep_main.cxx131
-rw-r--r--xml2cmp/source/finder/dependy.cxx261
-rw-r--r--xml2cmp/source/finder/dependy.hxx150
-rw-r--r--xml2cmp/source/finder/makefile.mk101
4 files changed, 643 insertions, 0 deletions
diff --git a/xml2cmp/source/finder/dep_main.cxx b/xml2cmp/source/finder/dep_main.cxx
new file mode 100644
index 000000000..108f3aaa5
--- /dev/null
+++ b/xml2cmp/source/finder/dep_main.cxx
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * $RCSfile: dep_main.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: np $ $Date: 2001-03-23 13:32:07 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <iostream>
+
+#include "dependy.hxx"
+
+
+using namespace std;
+
+
+
+int
+#ifdef WNT
+_cdecl
+#endif
+main( int argc,
+ char * argv[] )
+{
+ if (argc < 2 || *argv[1] == '?')
+ {
+ cout << "\nUse:" << endl
+ << "srvdepy.exe <xml-component-descriptions-root-directory>"
+ << endl << endl;
+ return 0;
+ }
+
+
+ DependencyFinder aDependencies;
+
+ aDependencies.GatherData(argv[1]);
+ char sInput[500] = "";
+ std::vector<Simstr> aLibs;
+ std::vector<Simstr> aServs;
+
+
+ cout << "\nNow you can start to put in Service names." << endl
+ << "Please use correct case, but don't use namespaces." << endl
+ << "Just the Service's own name." << endl << endl
+ << "To stop the program, put in a hashmark \"#\" + ENTER." << endl << endl;
+
+
+
+ do {
+
+ sInput[0] = 0;
+ cin >> sInput;
+ Simstr sImplService(sInput);
+ if (*sInput != '#')
+ {
+ aLibs.erase( aLibs.begin(), aLibs.end() );
+ aServs.erase( aServs.begin(), aServs.end() );
+
+ aDependencies.FindNeededServices( aLibs, aServs, sImplService );
+
+ cout << "\n\n\nNeeded libraries: " << endl;
+ for ( unsigned i = 0; i < aLibs.size(); ++i )
+ {
+ cout << " " << aLibs[i].str() << endl;
+ }
+ cout << "\nNeeded services: " << endl;
+ for ( unsigned s= 0; s < aServs.size(); ++s )
+ {
+ cout << " " << aServs[s].str() << endl;
+ }
+ cout << endl << endl << endl;
+ }
+ } while (*sInput != '#');
+
+ return 0;
+}
+
+
diff --git a/xml2cmp/source/finder/dependy.cxx b/xml2cmp/source/finder/dependy.cxx
new file mode 100644
index 000000000..cb0eba20f
--- /dev/null
+++ b/xml2cmp/source/finder/dependy.cxx
@@ -0,0 +1,261 @@
+/*************************************************************************
+ *
+ * $RCSfile: dependy.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: np $ $Date: 2001-03-23 13:32:07 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+
+#include "dependy.hxx"
+#include <iostream>
+#include "../support/syshelp.hxx"
+#include "../support/list.hxx"
+#include "../xcd/xmltree.hxx"
+#include "../xcd/parse.hxx"
+
+
+
+using namespace std;
+
+
+Simstr ShortName(const Simstr & i_rService);
+
+
+
+Service::Service( const char * i_sName )
+ : sName(i_sName)
+ // aImplementations
+{
+}
+
+ServiceInfo &
+Service::AddImplementation( const char * i_sLibrary )
+{
+ ServiceInfo * ret = new ServiceInfo(i_sLibrary);
+ aImplementations.push_back(ret);
+ return *ret;
+}
+
+ServiceInfo::ServiceInfo( const char * i_sLibrary )
+ : sImplementingLibrary(i_sLibrary)
+ // aNeededServices
+{
+}
+
+void
+ServiceInfo::AddDependency( const char * i_sNeededService )
+{
+ aNeededServices.push_back(i_sNeededService);
+}
+
+DependencyFinder::DependencyFinder()
+{
+}
+
+DependencyFinder::~DependencyFinder()
+{
+}
+
+void
+DependencyFinder::GatherData( const char * i_sSearchDirectory )
+{
+ List<Simstr> aFiles;
+ GatherFileNames( aFiles, i_sSearchDirectory );
+
+ for ( unsigned i = 0; i < aFiles.size(); ++i )
+ {
+ ReadFile( aFiles[i].str() );
+ }
+}
+
+void
+DependencyFinder::FindNeededServices( StringVector & o_rLibraries,
+ StringVector & o_rServices,
+ const Simstr & i_rService )
+{
+ Map_Services::const_iterator itService = aServices.find(i_rService);
+ if ( itService == aServices.end() )
+ {
+ std::cerr << "Error: Service \""
+ << i_rService.str()
+ << "\" not found."
+ << std::endl;
+ return ;
+ }
+
+ aResult_Libraries.erase( aResult_Libraries.begin(), aResult_Libraries.end() );
+ aResult_Services.erase( aResult_Services.begin(), aResult_Services.end() );
+
+ const ServiceInfo & rSInfo = (*itService).second->FirstImplementation();
+ Add2Result( *(*itService).second );
+
+ for ( std::set< Simstr >::const_iterator il = aResult_Libraries.begin();
+ il != aResult_Libraries.end();
+ ++il )
+ {
+ o_rLibraries.push_back(*il);
+ }
+
+ for ( std::set< Simstr >::const_iterator is = aResult_Services.begin();
+ is != aResult_Services.end();
+ ++is )
+ {
+ o_rServices.push_back(*is);
+ }
+}
+
+void
+DependencyFinder::ReadFile( const char * i_sFilename )
+{
+ ModuleDescription aModule;
+ X2CParser aParser(aModule);
+
+ if ( !aParser.Parse(i_sFilename) )
+ {
+ cerr << "Error: File \""
+ << i_sFilename
+ << "\" could not be parsed."
+ << std::endl;
+ return;
+ }
+
+ // GetResults:
+ Simstr sModule = aModule.ModuleName();
+
+ List < const MultipleTextElement* > aImplServices;
+ List < const MultipleTextElement* > aNeededServices;
+
+ aModule.Get_SupportedServices(aImplServices);
+ aModule.Get_ServiceDependencies(aNeededServices);
+
+ unsigned nImplServicesSize = aImplServices.size();
+ unsigned nNeededServicesSize = aNeededServices.size();
+
+ for ( unsigned i = 0; i < nImplServicesSize; ++i )
+ {
+ const MultipleTextElement & rImpl = *aImplServices[i];
+
+ unsigned nImplDataSize = rImpl.Size();
+ for ( unsigned di = 0; di < nImplDataSize; ++di )
+ {
+ Simstr sService = ShortName(rImpl.Data(di));
+ Service * pService = aServices[sService];
+ if (pService == 0)
+ {
+ pService = new Service(rImpl.Data(di));
+ aServices[sService] = pService;
+ }
+ ServiceInfo & rSInfo = pService->AddImplementation(sModule);
+
+ for ( unsigned n = 0; n < nNeededServicesSize; ++n )
+ {
+ unsigned nNeededDataSize = aNeededServices[n]->Size();
+ for ( unsigned dn = 0; dn < nNeededDataSize; ++dn )
+ {
+ if (! aNeededServices[n]->Data(dn).is_no_text())
+ rSInfo.AddDependency( ShortName(aNeededServices[n]->Data(dn)) );
+ } // end for dn
+ } // end for n
+ } // end for di
+ } // end for i
+}
+
+void
+DependencyFinder::Add2Result( const Service & i_rService )
+{
+ const ServiceInfo & rSInfo = i_rService.FirstImplementation();
+ aResult_Libraries.insert(rSInfo.Library());
+
+ const ServiceInfo::List_NeededServices & rNeededs
+ = rSInfo.NeededServices();
+ for ( StringVector::const_iterator it = rNeededs.begin();
+ it != rNeededs.end();
+ ++it )
+ {
+ std::pair< std::set< Simstr >::iterator, bool > aInsertResult
+ = aResult_Services.insert(*it);
+ if (aInsertResult.second)
+ { // Needed service not yet known
+ Map_Services::const_iterator itFound = aServices.find(*it);
+ if ( itFound == aServices.end() )
+ {
+ std::cerr << "Needed service \""
+ << (*it).str()
+ << "\" not found,"
+ << std::endl;
+ }
+ else
+ {
+ Add2Result( *(*itFound).second );
+ }
+ } // endif (! aInsertResult.second)
+ } // end for (it)
+}
+
+
+
+Simstr
+ShortName(const Simstr & i_rService)
+{
+ const char * pStart = i_rService.str();
+ const char * pEnd = strchr(pStart,' ');
+ if (pEnd != 0)
+ return Simstr(pStart, 0, int(pEnd-pStart));
+ else
+ return i_rService;
+}
+
diff --git a/xml2cmp/source/finder/dependy.hxx b/xml2cmp/source/finder/dependy.hxx
new file mode 100644
index 000000000..ee453d0a6
--- /dev/null
+++ b/xml2cmp/source/finder/dependy.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * $RCSfile: dependy.hxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: np $ $Date: 2001-03-23 13:32:07 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifndef X2C_DEPENDY_HXX
+#define X2C_DEPENDY_HXX
+
+
+#include <vector>
+#include <map>
+#include <set>
+#include <../support/sistr.hxx>
+
+class Service;
+class ServiceInfo;
+
+typedef std::vector< Simstr> StringVector;
+typedef std::vector< ServiceInfo* > List_Implementations;
+typedef std::map< Simstr, Service* > Map_Services;
+
+class Service
+{
+ public:
+ Service(
+ const char * i_sName );
+
+ ServiceInfo & AddImplementation(
+ const char * i_sLibrary ); /// That is: module-name.
+
+ const Simstr & Name() const { return sName; }
+ const ServiceInfo & FirstImplementation() const
+ { return *aImplementations[0]; }
+
+ private:
+ Simstr sName;
+ List_Implementations
+ aImplementations;
+};
+
+class ServiceInfo
+{
+ public:
+ typedef StringVector List_NeededServices;
+
+ ServiceInfo(
+ const char * i_sLibrary );
+
+ void AddDependency(
+ const char * i_sNeededService );
+
+ const Simstr & Library() const { return sImplementingLibrary; }
+ const List_NeededServices &
+ NeededServices() const { return aNeededServices; }
+
+
+ private:
+ Simstr sImplementingLibrary;
+ List_NeededServices aNeededServices;
+};
+
+
+class DependencyFinder
+{
+ public:
+ DependencyFinder();
+ ~DependencyFinder();
+
+ void GatherData(
+ const char * i_sSearchDirectory );
+
+ void FindNeededServices(
+ StringVector & o_rLibraries,
+ StringVector & o_rServices,
+ const Simstr & i_rService );
+ private:
+ void ReadFile(
+ const char * i_sFilename );
+ void Add2Result(
+ const Service & i_rService );
+
+ // Data
+ Map_Services aServices;
+
+ // Temporary data
+ std::set< Simstr > aResult_Libraries;
+ std::set< Simstr > aResult_Services;
+};
+
+
+
+#endif
+
+
diff --git a/xml2cmp/source/finder/makefile.mk b/xml2cmp/source/finder/makefile.mk
new file mode 100644
index 000000000..85547bea9
--- /dev/null
+++ b/xml2cmp/source/finder/makefile.mk
@@ -0,0 +1,101 @@
+#*************************************************************************
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.1 $
+#
+# last change: $Author: np $ $Date: 2001-03-23 13:32:07 $
+#
+# The Contents of this file are made available subject to the terms of
+# either of the following licenses
+#
+# - GNU Lesser General Public License Version 2.1
+# - Sun Industry Standards Source License Version 1.1
+#
+# Sun Microsystems Inc., October, 2000
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2000 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Sun Industry Standards Source License Version 1.1
+# =================================================
+# The contents of this file are subject to the Sun Industry Standards
+# Source License Version 1.1 (the "License"); You may not use this file
+# except in compliance with the License. You may obtain a copy of the
+# License at http://www.openoffice.org/license.html.
+#
+# Software provided under this License is provided on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+# See the License for the specific provisions governing your rights and
+# obligations concerning the Software.
+#
+# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+# Copyright: 2000 by Sun Microsystems, Inc.
+#
+# All Rights Reserved.
+#
+# Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJ=..$/..
+
+PRJNAME=xml2cmp
+TARGET=srvdepy
+TARGETTYPE=CUI
+
+
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+
+
+# --- Files --------------------------------------------------------
+
+OBJFILES= \
+ $(OBJ)$/dependy.obj \
+ $(OBJ)$/dep_main.obj
+
+
+# --- Targets ------------------------------------------------------
+
+APP1TARGET= $(TARGET)
+APP1STACK= 1000000
+
+.IF "$(GUI)"=="WNT"
+APP1STDLIBS= MSVCIRT.LIB
+.ENDIF
+
+
+APP1LIBS= $(LB)$/$(TARGET).lib $(LB)$/x2c_xcdl.lib $(LB)$/x2c_support.lib
+APP1DEPN= $(LB)$/$(TARGET).lib $(LB)$/x2c_xcdl.lib $(LB)$/x2c_support.lib
+
+
+.INCLUDE : target.mk
+
+
+