Browse Source

Added basic ctkCmdLineModulePathBuilder and ctkCmdLineModuleDefaultPathBuilder

Conflicts:

	Libs/CommandLineModules/Core/CMakeLists.txt
MattClarkson 13 years ago
parent
commit
a0aa455805

+ 2 - 0
Libs/CommandLineModules/Core/CMakeLists.txt

@@ -14,6 +14,7 @@ set(KIT_export_directive "CTK_CMDLINEMODULECORE_EXPORT")
 
 # Source files
 set(KIT_SRCS
+  ctkCmdLineModuleDefaultPathBuilder.cpp
   ctkCmdLineModuleDescription.cpp
   ctkCmdLineModuleDescriptionPrivate.h
   ctkCmdLineModuleInstance.cpp
@@ -24,6 +25,7 @@ set(KIT_SRCS
   ctkCmdLineModuleParameterGroup.cpp
   ctkCmdLineModuleParameterGroupPrivate.h
   ctkCmdLineModuleParameterParsers_p.h
+  ctkCmdLineModulePathBuilder.cpp
   ctkCmdLineModuleProcessTask.cpp
   ctkCmdLineModuleXmlProgressWatcher.cpp
   ctkCmdLineModuleReference.cpp

+ 104 - 0
Libs/CommandLineModules/Core/ctkCmdLineModuleDefaultPathBuilder.cpp

@@ -0,0 +1,104 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#include "ctkCmdLineModuleDefaultPathBuilder.h"
+#include <QDir>
+#include <QDebug>
+#include <QCoreApplication>
+#include <cstdlib>
+
+struct ctkCmdLineModuleDefaultPathBuilderPrivate
+{
+public:
+  ctkCmdLineModuleDefaultPathBuilderPrivate();
+  ~ctkCmdLineModuleDefaultPathBuilderPrivate();
+  QStringList build();
+};
+
+//-----------------------------------------------------------------------------
+// ctkCmdLineModuleDefaultPathBuilderPrivate methods
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleDefaultPathBuilderPrivate::ctkCmdLineModuleDefaultPathBuilderPrivate()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleDefaultPathBuilderPrivate::~ctkCmdLineModuleDefaultPathBuilderPrivate()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+QStringList ctkCmdLineModuleDefaultPathBuilderPrivate::build()
+{
+  QStringList result;
+
+  QString suffix = "cli-modules";
+
+  char *ctkModuleLoadPath = getenv("CTK_MODULE_LOAD_PATH");
+  if (ctkModuleLoadPath != NULL)
+  {
+    QDir dir = QDir(QString(ctkModuleLoadPath));
+    if (dir.exists())
+    {
+      result << dir.canonicalPath();
+    }
+  }
+
+  if (QDir::home().exists())
+  {
+    result << QDir::homePath();
+    result << QDir::homePath() + QDir::separator() + suffix;
+  }
+
+  if (QDir::current().exists())
+  {
+    result << QDir::currentPath();
+    result << QDir::currentPath() + QDir::separator() + suffix;
+  }
+
+  result << QCoreApplication::applicationDirPath();
+  result << QCoreApplication::applicationDirPath() + QDir::separator() + suffix;
+
+  return result;
+}
+
+//-----------------------------------------------------------------------------
+// ctkCmdLineModuleDefaultPathBuilder methods
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleDefaultPathBuilder::ctkCmdLineModuleDefaultPathBuilder()
+  : d(new ctkCmdLineModuleDefaultPathBuilderPrivate)
+{
+}
+
+//-----------------------------------------------------------------------------
+ctkCmdLineModuleDefaultPathBuilder::~ctkCmdLineModuleDefaultPathBuilder()
+{
+}
+
+//-----------------------------------------------------------------------------
+QStringList ctkCmdLineModuleDefaultPathBuilder::build()
+{
+  return d->build();
+}

+ 66 - 0
Libs/CommandLineModules/Core/ctkCmdLineModuleDefaultPathBuilder.h

@@ -0,0 +1,66 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#ifndef __ctkCmdLineModuleDefaultPathBuilder_h
+#define __ctkCmdLineModuleDefaultPathBuilder_h
+
+#include "ctkCommandLineModulesCoreExport.h"
+#include <QStringList>
+#include <QScopedPointer>
+
+class ctkCmdLineModuleDefaultPathBuilderPrivate;
+
+/**
+ * \class ctkCmdLineModuleDefaultPathBuilder
+ * \brief Builds up a list of file paths to search for command line modules.
+ *
+ * Unfinished:
+ *
+ * <pre>
+ * Implements the following basic strategy:
+ * 1. CTK_MODULE_LOAD_PATH environment variable
+ * 2. Home directory
+ * 3. Home directory / cli-modules
+ * 4. Current working directory
+ * 5. Current working directory / cli-modules
+ * 6. Application directory
+ * 7. Application directory / cli-modules
+ * </pre>
+ *
+ * \author m.clarkson@ucl.ac.uk
+ */
+class CTK_CMDLINEMODULECORE_EXPORT ctkCmdLineModuleDefaultPathBuilder
+{
+
+public:
+
+  ctkCmdLineModuleDefaultPathBuilder();
+  ~ctkCmdLineModuleDefaultPathBuilder();
+
+  virtual QStringList build();
+
+private:
+
+  QScopedPointer<ctkCmdLineModuleDefaultPathBuilderPrivate> d;
+  Q_DISABLE_COPY(ctkCmdLineModuleDefaultPathBuilder)
+};
+
+#endif

+ 26 - 0
Libs/CommandLineModules/Core/ctkCmdLineModulePathBuilder.cpp

@@ -0,0 +1,26 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#include "ctkCmdLineModulePathBuilder.h"
+
+ctkCmdLineModulePathBuilder::~ctkCmdLineModulePathBuilder()
+{
+}

+ 42 - 0
Libs/CommandLineModules/Core/ctkCmdLineModulePathBuilder.h

@@ -0,0 +1,42 @@
+/*=============================================================================
+
+  Library: CTK
+
+  Copyright (c) German Cancer Research Center,
+    Division of Medical and Biological Informatics
+
+  Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=============================================================================*/
+
+#ifndef CTKCMDLINEMODULEPATHBUILDER_H
+#define CTKCMDLINEMODULEPATHBUILDER_H
+
+#include <QStringList>
+
+#include "ctkCommandLineModulesCoreExport.h"
+
+/**
+ * \class ctkCmdLineModulePathBuilder
+ * \brief Prototype (unfinished) interface for objects that can build
+ * up a list of file paths, stored in a QStringList.
+ * \author m.clarkson@ucl.ac.uk
+ */
+struct CTK_CMDLINEMODULECORE_EXPORT ctkCmdLineModulePathBuilder
+{
+  virtual ~ctkCmdLineModulePathBuilder();
+
+  virtual QStringList build() = 0;
+};
+
+#endif // CTKCMDLINEMODULEPATHBUILDER_H