(no commit message)
authorRoland Häder <roland@mxchange.org>
Mon, 3 Mar 2008 20:29:15 +0000 (20:29 +0000)
committerRoland Häder <roland@mxchange.org>
Mon, 3 Mar 2008 20:29:15 +0000 (20:29 +0000)
547 files changed:
.gitattributes
Doxyfile [new file with mode: 0644]
application/.htaccess [new file with mode: 0644]
application/selector/.htaccess [new file with mode: 0644]
application/selector/class_ApplicationHelper.php [new file with mode: 0644]
application/selector/class_ApplicationSelector.php [new file with mode: 0644]
application/selector/debug.php [new file with mode: 0644]
application/selector/exceptions.php [new file with mode: 0644]
application/selector/init.php [new file with mode: 0644]
application/selector/loader.php [new file with mode: 0644]
application/selector/starter.php [new file with mode: 0644]
application/selector/templates/.htaccess [new file with mode: 0644]
application/selector/templates/de/.htaccess [new file with mode: 0644]
application/selector/templates/de/code/.htaccess [new file with mode: 0644]
application/selector/templates/de/code/selector_apps.ctp [new file with mode: 0644]
application/selector/templates/de/code/selector_main.ctp [new file with mode: 0644]
application/ship-simu/.htaccess [new file with mode: 0644]
application/ship-simu/class_ApplicationHelper.php [new file with mode: 0644]
application/ship-simu/debug.php [new file with mode: 0644]
application/ship-simu/exceptions.php [new file with mode: 0644]
application/ship-simu/exceptions/.htaccess [new file with mode: 0644]
application/ship-simu/exceptions/class_BirthdayInvalidException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_CabinShipMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ContractAllreadySignedException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ContractPartnerMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_DeckShipMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_EmptyStructuresListException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_InvalidContractPartnerException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_InvalidIDFormatException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ItemNotInPriceListException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ItemNotTradeableException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_MissingSimulatorIDException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_MotorShipMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_NoShipyardsConstructedException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_RoomShipMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ShipNotConstructedException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ShipPartNotConstructableException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_StructureShipMismatchException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_ToMuchEmployeesException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php [new file with mode: 0644]
application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php [new file with mode: 0644]
application/ship-simu/init.php [new file with mode: 0644]
application/ship-simu/interfaces/.htaccess [new file with mode: 0644]
application/ship-simu/interfaces/class_ConstructableShip.php [new file with mode: 0644]
application/ship-simu/interfaces/class_ConstructableShipPart.php [new file with mode: 0644]
application/ship-simu/interfaces/class_ContractPartner.php [new file with mode: 0644]
application/ship-simu/interfaces/class_Customer.php [new file with mode: 0644]
application/ship-simu/interfaces/class_ItemIsTradeable.php [new file with mode: 0644]
application/ship-simu/interfaces/class_Personellizer.php [new file with mode: 0644]
application/ship-simu/loader.php [new file with mode: 0644]
application/ship-simu/main/.htaccess [new file with mode: 0644]
application/ship-simu/main/class_ [new file with mode: 0644]
application/ship-simu/main/class_BasePersonell.php [new file with mode: 0644]
application/ship-simu/main/class_BaseSimulator.php [new file with mode: 0644]
application/ship-simu/main/class_Merchant.php [new file with mode: 0644]
application/ship-simu/main/class_WorksContract.php [new file with mode: 0644]
application/ship-simu/main/companies/.htaccess [new file with mode: 0644]
application/ship-simu/main/companies/class_ShippingCompany.php [new file with mode: 0644]
application/ship-simu/main/constructions/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/berths/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/berths/class_Berth.php [new file with mode: 0644]
application/ship-simu/main/constructions/class_BaseConstruction.php [new file with mode: 0644]
application/ship-simu/main/constructions/docks/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/docks/class_DryDock.php [new file with mode: 0644]
application/ship-simu/main/constructions/harbors/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/harbors/class_Harbor.php [new file with mode: 0644]
application/ship-simu/main/constructions/terminals/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/terminals/class_Terminal.php [new file with mode: 0644]
application/ship-simu/main/constructions/yards/.htaccess [new file with mode: 0644]
application/ship-simu/main/constructions/yards/class_Shipyard.php [new file with mode: 0644]
application/ship-simu/main/drives/.htaccess [new file with mode: 0644]
application/ship-simu/main/drives/class_BaseDrive.php [new file with mode: 0644]
application/ship-simu/main/drives/motor/.htaccess [new file with mode: 0644]
application/ship-simu/main/drives/motor/class_Motor.php [new file with mode: 0644]
application/ship-simu/main/parts/.htaccess [new file with mode: 0644]
application/ship-simu/main/parts/class_BaseShipPart.php [new file with mode: 0644]
application/ship-simu/main/parts/maschineroom/.htaccess [new file with mode: 0644]
application/ship-simu/main/parts/maschineroom/class_MaschineRoom.php [new file with mode: 0644]
application/ship-simu/main/personell/.htaccess [new file with mode: 0644]
application/ship-simu/main/personell/class_SimulatorPersonell.php [new file with mode: 0644]
application/ship-simu/main/personell/company/.htaccess [new file with mode: 0644]
application/ship-simu/main/personell/company/class_CompanyEmployee.php [new file with mode: 0644]
application/ship-simu/main/ships/.htaccess [new file with mode: 0644]
application/ship-simu/main/ships/class_BaseShip.php [new file with mode: 0644]
application/ship-simu/main/ships/passenger/.htaccess [new file with mode: 0644]
application/ship-simu/main/ships/passenger/class_PassengerShip.php [new file with mode: 0644]
application/ship-simu/main/structures/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/class_BaseStructure.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/class_BaseCabin.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/ship/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/ship/class_EconomyCabin.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/ship/class_LowCabin.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/ship/class_LuxuryCabin.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/cabines/ship/class_PremierCabin.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/class_ [new file with mode: 0644]
application/ship-simu/main/structures/extended/class_BaseCabinStructure.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/class_BaseDeckStructure.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/class_BaseUpperStructure.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/cargo/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/cargo/class_CarDeck.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/cargo/class_TrainDeck.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/cargo/class_TruckDeck.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/decks/class_BaseDeck.php [new file with mode: 0644]
application/ship-simu/main/structures/extended/lower/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/upper/.htaccess [new file with mode: 0644]
application/ship-simu/main/structures/extended/upper/class_Bridge.php [new file with mode: 0644]
application/ship-simu/starter.php [new file with mode: 0644]
application/ship-simu/templates/.htaccess [new file with mode: 0644]
application/ship-simu/templates/de/.htaccess [new file with mode: 0644]
application/ship-simu/templates/de/html/.htaccess [new file with mode: 0644]
application/ship-simu/templates/de/html/selector_ship-simu.tpl [new file with mode: 0644]
db/.htaccess [new file with mode: 0644]
devel/.htaccess [new file with mode: 0644]
devel/class_Debug.php [new file with mode: 0644]
docs/THANKS [new file with mode: 0644]
inc/.htaccess [new file with mode: 0644]
inc/classes.php [new file with mode: 0644]
inc/classes/.htaccess [new file with mode: 0644]
inc/classes/exceptions/.htaccess [new file with mode: 0644]
inc/classes/exceptions/class_FrameworkException.php [new file with mode: 0644]
inc/classes/exceptions/compressor/.htaccess [new file with mode: 0644]
inc/classes/exceptions/compressor/class_MismatchingCompressorsException.php [new file with mode: 0644]
inc/classes/exceptions/container/.htaccess [new file with mode: 0644]
inc/classes/exceptions/container/class_ContainerItemIsNoArrayException.php [new file with mode: 0644]
inc/classes/exceptions/container/class_ContainerItemIsNullException.php [new file with mode: 0644]
inc/classes/exceptions/container/class_ContainerMaybeDamagedException.php [new file with mode: 0644]
inc/classes/exceptions/database/.htaccess [new file with mode: 0644]
inc/classes/exceptions/database/local_file/.htaccess [new file with mode: 0644]
inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php [new file with mode: 0644]
inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php [new file with mode: 0644]
inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php [new file with mode: 0644]
inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php [new file with mode: 0644]
inc/classes/exceptions/io/.htaccess [new file with mode: 0644]
inc/classes/exceptions/io/class_DirPointerNotOpenedException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_FilePointerNotOpenedException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_InvalidDataLengthException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_InvalidDirectoryResourceException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_InvalidMD5ChecksumException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_PathIsEmptyException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_PathIsNoDirectoryException.php [new file with mode: 0644]
inc/classes/exceptions/io/class_PathReadProtectedException.php [new file with mode: 0644]
inc/classes/exceptions/language/.htaccess [new file with mode: 0644]
inc/classes/exceptions/language/class_InvalidLanguagePathStringException.php [new file with mode: 0644]
inc/classes/exceptions/language/class_LanguagePathIsEmptyException.php [new file with mode: 0644]
inc/classes/exceptions/language/class_LanguagePathIsNoDirectoryException.php [new file with mode: 0644]
inc/classes/exceptions/language/class_LanguagePathReadProtectedException.php [new file with mode: 0644]
inc/classes/exceptions/main/.htaccess [new file with mode: 0644]
inc/classes/exceptions/main/class_ClassMismatchException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_ClassNotFoundException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_ConfigEntryIsEmptyException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_ConfigEntryNotFoundException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_DimNotFoundInArrayException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_ExceptionNotChangedException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_ExceptionNotFoundException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_GetterNotFoundException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_InvalidArrayCountException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_InvalidObjectException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_MissingArrayElementsException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_MissingDecimalsThousandsSeperatorException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_MissingMethodException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_NoArrayCreatedException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_NoArrayException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_NoObjectException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_NullPointerException.php [new file with mode: 0644]
inc/classes/exceptions/main/class_VariableIsNotSetException.php [new file with mode: 0644]
inc/classes/exceptions/template/.htaccess [new file with mode: 0644]
inc/classes/exceptions/template/class_BasePathIsEmptyException.php [new file with mode: 0644]
inc/classes/exceptions/template/class_BasePathIsNoDirectoryException.php [new file with mode: 0644]
inc/classes/exceptions/template/class_BasePathReadProtectedException.php [new file with mode: 0644]
inc/classes/exceptions/template/class_InvalidBasePathStringException.php [new file with mode: 0644]
inc/classes/exceptions/template/class_InvalidTemplateVariableNameException.php [new file with mode: 0644]
inc/classes/exceptions/template/class_UnexpectedTemplateTypeException.php [new file with mode: 0644]
inc/classes/interfaces/.htaccess [new file with mode: 0644]
inc/classes/interfaces/application/.htaccess [new file with mode: 0644]
inc/classes/interfaces/application/class_ManageableApplication.php [new file with mode: 0644]
inc/classes/interfaces/class_FrameworkInterface.php [new file with mode: 0644]
inc/classes/interfaces/compressor/.htaccess [new file with mode: 0644]
inc/classes/interfaces/compressor/class_Compressor.php [new file with mode: 0644]
inc/classes/interfaces/database/.htaccess [new file with mode: 0644]
inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php [new file with mode: 0644]
inc/classes/interfaces/database/frontend/.htaccess [new file with mode: 0644]
inc/classes/interfaces/database/frontend/class_DatabaseFrontendInterface.php [new file with mode: 0644]
inc/classes/interfaces/database/middleware/.htaccess [new file with mode: 0644]
inc/classes/interfaces/database/middleware/class_DatabaseConnector.php [new file with mode: 0644]
inc/classes/interfaces/debug/.htaccess [new file with mode: 0644]
inc/classes/interfaces/debug/class_Debugger.php [new file with mode: 0644]
inc/classes/interfaces/extended/.htaccess [new file with mode: 0644]
inc/classes/interfaces/extended/class_LimitableObject.php [new file with mode: 0644]
inc/classes/interfaces/io/.htaccess [new file with mode: 0644]
inc/classes/interfaces/io/class_Streamable.php [new file with mode: 0644]
inc/classes/interfaces/io/file/.htaccess [new file with mode: 0644]
inc/classes/interfaces/io/file/class_FileInputStreamer.php [new file with mode: 0644]
inc/classes/interfaces/io/file/class_FileOutputStreamer.php [new file with mode: 0644]
inc/classes/interfaces/io/output/.htaccess [new file with mode: 0644]
inc/classes/interfaces/io/output/class_OutputStreamer.php [new file with mode: 0644]
inc/classes/interfaces/language/.htaccess [new file with mode: 0644]
inc/classes/interfaces/language/class_ManageableLanguage.php [new file with mode: 0644]
inc/classes/interfaces/template/.htaccess [new file with mode: 0644]
inc/classes/interfaces/template/class_CompileableTemplate.php [new file with mode: 0644]
inc/classes/main/.htaccess [new file with mode: 0644]
inc/classes/main/class_BaseFrameworkSystem.php [new file with mode: 0644]
inc/classes/main/class_FrameworkArrayObject.php [new file with mode: 0644]
inc/classes/main/compressor/.htaccess [new file with mode: 0644]
inc/classes/main/compressor/class_Bzip2Compressor.php [new file with mode: 0644]
inc/classes/main/compressor/class_GzipCompressor.php [new file with mode: 0644]
inc/classes/main/compressor/class_NullCompressor.php [new file with mode: 0644]
inc/classes/main/console/.htaccess [new file with mode: 0644]
inc/classes/main/console/class_ConsoleTools.php [new file with mode: 0644]
inc/classes/main/database/.htaccess [new file with mode: 0644]
inc/classes/main/database/class_BaseDatabaseFrontend.php [new file with mode: 0644]
inc/classes/main/database/classes/.htaccess [new file with mode: 0644]
inc/classes/main/database/classes/class_LocalFileDatabase.php [new file with mode: 0644]
inc/classes/main/debug/.htaccess [new file with mode: 0644]
inc/classes/main/debug/class_DebugConsoleOutput.php [new file with mode: 0644]
inc/classes/main/debug/class_DebugErrorLogOutput.php [new file with mode: 0644]
inc/classes/main/debug/class_DebugWebOutput.php [new file with mode: 0644]
inc/classes/main/extended/.htaccess [new file with mode: 0644]
inc/classes/main/extended/class_ObjectLimits.php [new file with mode: 0644]
inc/classes/main/extended/class_SerializationContainer.php [new file with mode: 0644]
inc/classes/main/io/.htaccess [new file with mode: 0644]
inc/classes/main/io/class_FileIOStream.php [new file with mode: 0644]
inc/classes/main/io/class_FrameworkDirectoryPointer.php [new file with mode: 0644]
inc/classes/main/io/class_FrameworkFileInputPointer.php [new file with mode: 0644]
inc/classes/main/io/class_FrameworkFileOutputPointer.php [new file with mode: 0644]
inc/classes/main/language/.htaccess [new file with mode: 0644]
inc/classes/main/language/class_LanguageSystem.php [new file with mode: 0644]
inc/classes/main/output/.htaccess [new file with mode: 0644]
inc/classes/main/output/class_ConsoleOutput.php [new file with mode: 0644]
inc/classes/main/output/class_WebOutput.php [new file with mode: 0644]
inc/classes/main/template/.htaccess [new file with mode: 0644]
inc/classes/main/template/class_TemplateEngine.php [new file with mode: 0644]
inc/classes/middleware/.htaccess [new file with mode: 0644]
inc/classes/middleware/class_BaseMiddleware.php [new file with mode: 0644]
inc/classes/middleware/compressor/.htaccess [new file with mode: 0644]
inc/classes/middleware/compressor/class_CompressorChannel.php [new file with mode: 0644]
inc/classes/middleware/database/.htaccess [new file with mode: 0644]
inc/classes/middleware/database/class_DatabaseConnection.php [new file with mode: 0644]
inc/classes/middleware/debug/.htaccess [new file with mode: 0644]
inc/classes/middleware/debug/class_DebugMiddleware.php [new file with mode: 0644]
inc/classes/middleware/io/.htaccess [new file with mode: 0644]
inc/classes/middleware/io/class_FileIOHandler.php [new file with mode: 0644]
inc/config.php [new file with mode: 0644]
inc/config/.htaccess [new file with mode: 0644]
inc/config/class_FrameworkConfiguration.php [new file with mode: 0644]
inc/database.php [new file with mode: 0644]
inc/database/.htaccess [new file with mode: 0644]
inc/database/lib-local.php [new file with mode: 0644]
inc/file_io.php [new file with mode: 0644]
inc/includes.php [new file with mode: 0644]
inc/language.php [new file with mode: 0644]
inc/language/.htaccess [new file with mode: 0644]
inc/loader/.htaccess [new file with mode: 0644]
inc/loader/class_ClassLoader.php [new file with mode: 0644]
inc/output.php [new file with mode: 0644]
inc/selector.php [new file with mode: 0644]
index.php [new file with mode: 0644]
rebuild_doc.sh [new file with mode: 0755]
ship-simu/Doxyfile [deleted file]
ship-simu/application/.htaccess [deleted file]
ship-simu/application/selector/.htaccess [deleted file]
ship-simu/application/selector/class_ApplicationHelper.php [deleted file]
ship-simu/application/selector/class_ApplicationSelector.php [deleted file]
ship-simu/application/selector/debug.php [deleted file]
ship-simu/application/selector/exceptions.php [deleted file]
ship-simu/application/selector/init.php [deleted file]
ship-simu/application/selector/loader.php [deleted file]
ship-simu/application/selector/starter.php [deleted file]
ship-simu/application/selector/templates/.htaccess [deleted file]
ship-simu/application/selector/templates/de/.htaccess [deleted file]
ship-simu/application/selector/templates/de/code/.htaccess [deleted file]
ship-simu/application/selector/templates/de/code/selector_apps.ctp [deleted file]
ship-simu/application/selector/templates/de/code/selector_main.ctp [deleted file]
ship-simu/application/ship-simu/.htaccess [deleted file]
ship-simu/application/ship-simu/class_ApplicationHelper.php [deleted file]
ship-simu/application/ship-simu/debug.php [deleted file]
ship-simu/application/ship-simu/exceptions.php [deleted file]
ship-simu/application/ship-simu/exceptions/.htaccess [deleted file]
ship-simu/application/ship-simu/exceptions/class_BirthdayInvalidException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_CabinShipMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ContractAllreadySignedException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ContractPartnerMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_DeckShipMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_EmptyStructuresListException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_InvalidContractPartnerException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_InvalidIDFormatException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ItemNotInPriceListException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ItemNotTradeableException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_MissingSimulatorIDException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_MotorShipMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_NoShipyardsConstructedException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_RoomShipMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ShipNotConstructedException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ShipPartNotConstructableException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_StructureShipMismatchException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_ToMuchEmployeesException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php [deleted file]
ship-simu/application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php [deleted file]
ship-simu/application/ship-simu/init.php [deleted file]
ship-simu/application/ship-simu/interfaces/.htaccess [deleted file]
ship-simu/application/ship-simu/interfaces/class_ConstructableShip.php [deleted file]
ship-simu/application/ship-simu/interfaces/class_ConstructableShipPart.php [deleted file]
ship-simu/application/ship-simu/interfaces/class_ContractPartner.php [deleted file]
ship-simu/application/ship-simu/interfaces/class_Customer.php [deleted file]
ship-simu/application/ship-simu/interfaces/class_ItemIsTradeable.php [deleted file]
ship-simu/application/ship-simu/interfaces/class_Personellizer.php [deleted file]
ship-simu/application/ship-simu/loader.php [deleted file]
ship-simu/application/ship-simu/main/.htaccess [deleted file]
ship-simu/application/ship-simu/main/class_ [deleted file]
ship-simu/application/ship-simu/main/class_BasePersonell.php [deleted file]
ship-simu/application/ship-simu/main/class_BaseSimulator.php [deleted file]
ship-simu/application/ship-simu/main/class_Merchant.php [deleted file]
ship-simu/application/ship-simu/main/class_WorksContract.php [deleted file]
ship-simu/application/ship-simu/main/companies/.htaccess [deleted file]
ship-simu/application/ship-simu/main/companies/class_ShippingCompany.php [deleted file]
ship-simu/application/ship-simu/main/constructions/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/berths/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/berths/class_Berth.php [deleted file]
ship-simu/application/ship-simu/main/constructions/class_BaseConstruction.php [deleted file]
ship-simu/application/ship-simu/main/constructions/docks/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/docks/class_DryDock.php [deleted file]
ship-simu/application/ship-simu/main/constructions/harbors/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/harbors/class_Harbor.php [deleted file]
ship-simu/application/ship-simu/main/constructions/terminals/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/terminals/class_Terminal.php [deleted file]
ship-simu/application/ship-simu/main/constructions/yards/.htaccess [deleted file]
ship-simu/application/ship-simu/main/constructions/yards/class_Shipyard.php [deleted file]
ship-simu/application/ship-simu/main/drives/.htaccess [deleted file]
ship-simu/application/ship-simu/main/drives/class_BaseDrive.php [deleted file]
ship-simu/application/ship-simu/main/drives/motor/.htaccess [deleted file]
ship-simu/application/ship-simu/main/drives/motor/class_Motor.php [deleted file]
ship-simu/application/ship-simu/main/parts/.htaccess [deleted file]
ship-simu/application/ship-simu/main/parts/class_BaseShipPart.php [deleted file]
ship-simu/application/ship-simu/main/parts/maschineroom/.htaccess [deleted file]
ship-simu/application/ship-simu/main/parts/maschineroom/class_MaschineRoom.php [deleted file]
ship-simu/application/ship-simu/main/personell/.htaccess [deleted file]
ship-simu/application/ship-simu/main/personell/class_SimulatorPersonell.php [deleted file]
ship-simu/application/ship-simu/main/personell/company/.htaccess [deleted file]
ship-simu/application/ship-simu/main/personell/company/class_CompanyEmployee.php [deleted file]
ship-simu/application/ship-simu/main/ships/.htaccess [deleted file]
ship-simu/application/ship-simu/main/ships/class_BaseShip.php [deleted file]
ship-simu/application/ship-simu/main/ships/passenger/.htaccess [deleted file]
ship-simu/application/ship-simu/main/ships/passenger/class_PassengerShip.php [deleted file]
ship-simu/application/ship-simu/main/structures/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/class_BaseStructure.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/class_BaseCabin.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/ship/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_EconomyCabin.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_LowCabin.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_LuxuryCabin.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_PremierCabin.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/class_ [deleted file]
ship-simu/application/ship-simu/main/structures/extended/class_BaseCabinStructure.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/class_BaseDeckStructure.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/class_BaseUpperStructure.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/cargo/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_CarDeck.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_TrainDeck.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_TruckDeck.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/decks/class_BaseDeck.php [deleted file]
ship-simu/application/ship-simu/main/structures/extended/lower/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/upper/.htaccess [deleted file]
ship-simu/application/ship-simu/main/structures/extended/upper/class_Bridge.php [deleted file]
ship-simu/application/ship-simu/starter.php [deleted file]
ship-simu/application/ship-simu/templates/.htaccess [deleted file]
ship-simu/application/ship-simu/templates/de/.htaccess [deleted file]
ship-simu/application/ship-simu/templates/de/html/.htaccess [deleted file]
ship-simu/application/ship-simu/templates/de/html/selector_ship-simu.tpl [deleted file]
ship-simu/db/.htaccess [deleted file]
ship-simu/devel/.htaccess [deleted file]
ship-simu/devel/class_Debug.php [deleted file]
ship-simu/docs/THANKS [deleted file]
ship-simu/inc/.htaccess [deleted file]
ship-simu/inc/classes.php [deleted file]
ship-simu/inc/classes/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/class_FrameworkException.php [deleted file]
ship-simu/inc/classes/exceptions/compressor/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/compressor/class_MismatchingCompressorsException.php [deleted file]
ship-simu/inc/classes/exceptions/container/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/container/class_ContainerItemIsNoArrayException.php [deleted file]
ship-simu/inc/classes/exceptions/container/class_ContainerItemIsNullException.php [deleted file]
ship-simu/inc/classes/exceptions/container/class_ContainerMaybeDamagedException.php [deleted file]
ship-simu/inc/classes/exceptions/database/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/database/local_file/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php [deleted file]
ship-simu/inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php [deleted file]
ship-simu/inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php [deleted file]
ship-simu/inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php [deleted file]
ship-simu/inc/classes/exceptions/io/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/io/class_DirPointerNotOpenedException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_FilePointerNotOpenedException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_InvalidDataLengthException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_InvalidDirectoryResourceException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_InvalidMD5ChecksumException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_PathIsEmptyException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_PathIsNoDirectoryException.php [deleted file]
ship-simu/inc/classes/exceptions/io/class_PathReadProtectedException.php [deleted file]
ship-simu/inc/classes/exceptions/language/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/language/class_InvalidLanguagePathStringException.php [deleted file]
ship-simu/inc/classes/exceptions/language/class_LanguagePathIsEmptyException.php [deleted file]
ship-simu/inc/classes/exceptions/language/class_LanguagePathIsNoDirectoryException.php [deleted file]
ship-simu/inc/classes/exceptions/language/class_LanguagePathReadProtectedException.php [deleted file]
ship-simu/inc/classes/exceptions/main/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/main/class_ClassMismatchException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_ClassNotFoundException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_ConfigEntryIsEmptyException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_ConfigEntryNotFoundException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_DimNotFoundInArrayException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_ExceptionNotChangedException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_ExceptionNotFoundException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_GetterNotFoundException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_InvalidArrayCountException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_InvalidObjectException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_MissingArrayElementsException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_MissingDecimalsThousandsSeperatorException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_MissingMethodException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_NoArrayCreatedException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_NoArrayException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_NoObjectException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_NullPointerException.php [deleted file]
ship-simu/inc/classes/exceptions/main/class_VariableIsNotSetException.php [deleted file]
ship-simu/inc/classes/exceptions/template/.htaccess [deleted file]
ship-simu/inc/classes/exceptions/template/class_BasePathIsEmptyException.php [deleted file]
ship-simu/inc/classes/exceptions/template/class_BasePathIsNoDirectoryException.php [deleted file]
ship-simu/inc/classes/exceptions/template/class_BasePathReadProtectedException.php [deleted file]
ship-simu/inc/classes/exceptions/template/class_InvalidBasePathStringException.php [deleted file]
ship-simu/inc/classes/exceptions/template/class_InvalidTemplateVariableNameException.php [deleted file]
ship-simu/inc/classes/exceptions/template/class_UnexpectedTemplateTypeException.php [deleted file]
ship-simu/inc/classes/interfaces/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/application/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/application/class_ManageableApplication.php [deleted file]
ship-simu/inc/classes/interfaces/class_FrameworkInterface.php [deleted file]
ship-simu/inc/classes/interfaces/compressor/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/compressor/class_Compressor.php [deleted file]
ship-simu/inc/classes/interfaces/database/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php [deleted file]
ship-simu/inc/classes/interfaces/database/frontend/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/database/frontend/class_DatabaseFrontendInterface.php [deleted file]
ship-simu/inc/classes/interfaces/database/middleware/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php [deleted file]
ship-simu/inc/classes/interfaces/debug/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/debug/class_Debugger.php [deleted file]
ship-simu/inc/classes/interfaces/extended/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/extended/class_LimitableObject.php [deleted file]
ship-simu/inc/classes/interfaces/io/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/io/class_Streamable.php [deleted file]
ship-simu/inc/classes/interfaces/io/file/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/io/file/class_FileInputStreamer.php [deleted file]
ship-simu/inc/classes/interfaces/io/file/class_FileOutputStreamer.php [deleted file]
ship-simu/inc/classes/interfaces/io/output/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/io/output/class_OutputStreamer.php [deleted file]
ship-simu/inc/classes/interfaces/language/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/language/class_ManageableLanguage.php [deleted file]
ship-simu/inc/classes/interfaces/template/.htaccess [deleted file]
ship-simu/inc/classes/interfaces/template/class_CompileableTemplate.php [deleted file]
ship-simu/inc/classes/main/.htaccess [deleted file]
ship-simu/inc/classes/main/class_BaseFrameworkSystem.php [deleted file]
ship-simu/inc/classes/main/class_FrameworkArrayObject.php [deleted file]
ship-simu/inc/classes/main/compressor/.htaccess [deleted file]
ship-simu/inc/classes/main/compressor/class_Bzip2Compressor.php [deleted file]
ship-simu/inc/classes/main/compressor/class_GzipCompressor.php [deleted file]
ship-simu/inc/classes/main/compressor/class_NullCompressor.php [deleted file]
ship-simu/inc/classes/main/console/.htaccess [deleted file]
ship-simu/inc/classes/main/console/class_ConsoleTools.php [deleted file]
ship-simu/inc/classes/main/database/.htaccess [deleted file]
ship-simu/inc/classes/main/database/class_BaseDatabaseFrontend.php [deleted file]
ship-simu/inc/classes/main/database/classes/.htaccess [deleted file]
ship-simu/inc/classes/main/database/classes/class_LocalFileDatabase.php [deleted file]
ship-simu/inc/classes/main/debug/.htaccess [deleted file]
ship-simu/inc/classes/main/debug/class_DebugConsoleOutput.php [deleted file]
ship-simu/inc/classes/main/debug/class_DebugErrorLogOutput.php [deleted file]
ship-simu/inc/classes/main/debug/class_DebugWebOutput.php [deleted file]
ship-simu/inc/classes/main/extended/.htaccess [deleted file]
ship-simu/inc/classes/main/extended/class_ObjectLimits.php [deleted file]
ship-simu/inc/classes/main/extended/class_SerializationContainer.php [deleted file]
ship-simu/inc/classes/main/io/.htaccess [deleted file]
ship-simu/inc/classes/main/io/class_FileIOStream.php [deleted file]
ship-simu/inc/classes/main/io/class_FrameworkDirectoryPointer.php [deleted file]
ship-simu/inc/classes/main/io/class_FrameworkFileInputPointer.php [deleted file]
ship-simu/inc/classes/main/io/class_FrameworkFileOutputPointer.php [deleted file]
ship-simu/inc/classes/main/language/.htaccess [deleted file]
ship-simu/inc/classes/main/language/class_LanguageSystem.php [deleted file]
ship-simu/inc/classes/main/output/.htaccess [deleted file]
ship-simu/inc/classes/main/output/class_ConsoleOutput.php [deleted file]
ship-simu/inc/classes/main/output/class_WebOutput.php [deleted file]
ship-simu/inc/classes/main/template/.htaccess [deleted file]
ship-simu/inc/classes/main/template/class_TemplateEngine.php [deleted file]
ship-simu/inc/classes/middleware/.htaccess [deleted file]
ship-simu/inc/classes/middleware/class_BaseMiddleware.php [deleted file]
ship-simu/inc/classes/middleware/compressor/.htaccess [deleted file]
ship-simu/inc/classes/middleware/compressor/class_CompressorChannel.php [deleted file]
ship-simu/inc/classes/middleware/database/.htaccess [deleted file]
ship-simu/inc/classes/middleware/database/class_DatabaseConnection.php [deleted file]
ship-simu/inc/classes/middleware/debug/.htaccess [deleted file]
ship-simu/inc/classes/middleware/debug/class_DebugMiddleware.php [deleted file]
ship-simu/inc/classes/middleware/io/.htaccess [deleted file]
ship-simu/inc/classes/middleware/io/class_FileIOHandler.php [deleted file]
ship-simu/inc/config.php [deleted file]
ship-simu/inc/config/.htaccess [deleted file]
ship-simu/inc/config/class_FrameworkConfiguration.php [deleted file]
ship-simu/inc/database.php [deleted file]
ship-simu/inc/database/.htaccess [deleted file]
ship-simu/inc/database/lib-local.php [deleted file]
ship-simu/inc/file_io.php [deleted file]
ship-simu/inc/includes.php [deleted file]
ship-simu/inc/language.php [deleted file]
ship-simu/inc/language/.htaccess [deleted file]
ship-simu/inc/loader/.htaccess [deleted file]
ship-simu/inc/loader/class_ClassLoader.php [deleted file]
ship-simu/inc/output.php [deleted file]
ship-simu/inc/selector.php [deleted file]
ship-simu/index.php [deleted file]
ship-simu/rebuild_doc.sh [deleted file]
ship-simu/templates/.htaccess [deleted file]
ship-simu/templates/_compiled/.htaccess [deleted file]
ship-simu/templates/de/.htaccess [deleted file]
ship-simu/templates/de/code/.htaccess [deleted file]
ship-simu/templates/de/code/emergency_exit.ctp [deleted file]
ship-simu/templates/de/code/footer_msg.ctp [deleted file]
ship-simu/templates/de/code/header.ctp [deleted file]
ship-simu/templates/de/html/.htaccess [deleted file]
ship-simu/tests/contract-test.php [deleted file]
ship-simu/tests/loader-test.php [deleted file]
ship-simu/tests/personell-test.php [deleted file]
templates/.htaccess [new file with mode: 0644]
templates/_compiled/.htaccess [new file with mode: 0644]
templates/de/.htaccess [new file with mode: 0644]
templates/de/code/.htaccess [new file with mode: 0644]
templates/de/code/emergency_exit.ctp [new file with mode: 0644]
templates/de/code/footer_msg.ctp [new file with mode: 0644]
templates/de/code/header.ctp [new file with mode: 0644]
templates/de/html/.htaccess [new file with mode: 0644]
tests/contract-test.php [new file with mode: 0644]
tests/loader-test.php [new file with mode: 0644]
tests/personell-test.php [new file with mode: 0644]

index 3d5165c..1756aab 100644 (file)
 * text=auto !eol
-ship-simu/Doxyfile -text
-ship-simu/application/.htaccess -text
-ship-simu/application/selector/.htaccess -text
-ship-simu/application/selector/class_ApplicationHelper.php -text
-ship-simu/application/selector/class_ApplicationSelector.php -text
-ship-simu/application/selector/debug.php -text
-ship-simu/application/selector/exceptions.php -text
-ship-simu/application/selector/init.php -text
-ship-simu/application/selector/loader.php -text
-ship-simu/application/selector/starter.php -text
-ship-simu/application/selector/templates/.htaccess -text
-ship-simu/application/selector/templates/de/.htaccess -text
-ship-simu/application/selector/templates/de/code/.htaccess -text
-ship-simu/application/selector/templates/de/code/selector_apps.ctp -text
-ship-simu/application/selector/templates/de/code/selector_main.ctp -text
-ship-simu/application/ship-simu/.htaccess -text
-ship-simu/application/ship-simu/class_ApplicationHelper.php -text
-ship-simu/application/ship-simu/debug.php -text
-ship-simu/application/ship-simu/exceptions.php -text
-ship-simu/application/ship-simu/exceptions/.htaccess -text
-ship-simu/application/ship-simu/exceptions/class_BirthdayInvalidException.php -text
-ship-simu/application/ship-simu/exceptions/class_CabinShipMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_ContractAllreadySignedException.php -text
-ship-simu/application/ship-simu/exceptions/class_ContractPartnerMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_DeckShipMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_EmptyStructuresListException.php -text
-ship-simu/application/ship-simu/exceptions/class_InvalidContractPartnerException.php -text
-ship-simu/application/ship-simu/exceptions/class_InvalidIDFormatException.php -text
-ship-simu/application/ship-simu/exceptions/class_ItemNotInPriceListException.php -text
-ship-simu/application/ship-simu/exceptions/class_ItemNotTradeableException.php -text
-ship-simu/application/ship-simu/exceptions/class_MissingSimulatorIDException.php -text
-ship-simu/application/ship-simu/exceptions/class_MotorShipMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_NoShipyardsConstructedException.php -text
-ship-simu/application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php -text
-ship-simu/application/ship-simu/exceptions/class_RoomShipMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_ShipNotConstructedException.php -text
-ship-simu/application/ship-simu/exceptions/class_ShipPartNotConstructableException.php -text
-ship-simu/application/ship-simu/exceptions/class_StructureShipMismatchException.php -text
-ship-simu/application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php -text
-ship-simu/application/ship-simu/exceptions/class_ToMuchEmployeesException.php -text
-ship-simu/application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php -text
-ship-simu/application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php -text
-ship-simu/application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php -text
-ship-simu/application/ship-simu/init.php -text
-ship-simu/application/ship-simu/interfaces/.htaccess -text
-ship-simu/application/ship-simu/interfaces/class_ConstructableShip.php -text
-ship-simu/application/ship-simu/interfaces/class_ConstructableShipPart.php -text
-ship-simu/application/ship-simu/interfaces/class_ContractPartner.php -text
-ship-simu/application/ship-simu/interfaces/class_Customer.php -text
-ship-simu/application/ship-simu/interfaces/class_ItemIsTradeable.php -text
-ship-simu/application/ship-simu/interfaces/class_Personellizer.php -text
-ship-simu/application/ship-simu/loader.php -text
-ship-simu/application/ship-simu/main/.htaccess -text
-ship-simu/application/ship-simu/main/class_ -text
-ship-simu/application/ship-simu/main/class_BasePersonell.php -text
-ship-simu/application/ship-simu/main/class_BaseSimulator.php -text
-ship-simu/application/ship-simu/main/class_Merchant.php -text
-ship-simu/application/ship-simu/main/class_WorksContract.php -text
-ship-simu/application/ship-simu/main/companies/.htaccess -text
-ship-simu/application/ship-simu/main/companies/class_ShippingCompany.php -text
-ship-simu/application/ship-simu/main/constructions/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/berths/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/berths/class_Berth.php -text
-ship-simu/application/ship-simu/main/constructions/class_BaseConstruction.php -text
-ship-simu/application/ship-simu/main/constructions/docks/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/docks/class_DryDock.php -text
-ship-simu/application/ship-simu/main/constructions/harbors/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/harbors/class_Harbor.php -text
-ship-simu/application/ship-simu/main/constructions/terminals/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/terminals/class_Terminal.php -text
-ship-simu/application/ship-simu/main/constructions/yards/.htaccess -text
-ship-simu/application/ship-simu/main/constructions/yards/class_Shipyard.php -text
-ship-simu/application/ship-simu/main/drives/.htaccess -text
-ship-simu/application/ship-simu/main/drives/class_BaseDrive.php -text
-ship-simu/application/ship-simu/main/drives/motor/.htaccess -text
-ship-simu/application/ship-simu/main/drives/motor/class_Motor.php -text
-ship-simu/application/ship-simu/main/parts/.htaccess -text
-ship-simu/application/ship-simu/main/parts/class_BaseShipPart.php -text
-ship-simu/application/ship-simu/main/parts/maschineroom/.htaccess -text
-ship-simu/application/ship-simu/main/parts/maschineroom/class_MaschineRoom.php -text
-ship-simu/application/ship-simu/main/personell/.htaccess -text
-ship-simu/application/ship-simu/main/personell/class_SimulatorPersonell.php -text
-ship-simu/application/ship-simu/main/personell/company/.htaccess -text
-ship-simu/application/ship-simu/main/personell/company/class_CompanyEmployee.php -text
-ship-simu/application/ship-simu/main/ships/.htaccess -text
-ship-simu/application/ship-simu/main/ships/class_BaseShip.php -text
-ship-simu/application/ship-simu/main/ships/passenger/.htaccess -text
-ship-simu/application/ship-simu/main/ships/passenger/class_PassengerShip.php -text
-ship-simu/application/ship-simu/main/structures/.htaccess -text
-ship-simu/application/ship-simu/main/structures/class_BaseStructure.php -text
-ship-simu/application/ship-simu/main/structures/extended/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/class_BaseCabin.php -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/ship/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_EconomyCabin.php -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_LowCabin.php -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_LuxuryCabin.php -text
-ship-simu/application/ship-simu/main/structures/extended/cabines/ship/class_PremierCabin.php -text
-ship-simu/application/ship-simu/main/structures/extended/class_ -text
-ship-simu/application/ship-simu/main/structures/extended/class_BaseCabinStructure.php -text
-ship-simu/application/ship-simu/main/structures/extended/class_BaseDeckStructure.php -text
-ship-simu/application/ship-simu/main/structures/extended/class_BaseUpperStructure.php -text
-ship-simu/application/ship-simu/main/structures/extended/decks/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/decks/cargo/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_CarDeck.php -text
-ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_TrainDeck.php -text
-ship-simu/application/ship-simu/main/structures/extended/decks/cargo/class_TruckDeck.php -text
-ship-simu/application/ship-simu/main/structures/extended/decks/class_BaseDeck.php -text
-ship-simu/application/ship-simu/main/structures/extended/lower/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/upper/.htaccess -text
-ship-simu/application/ship-simu/main/structures/extended/upper/class_Bridge.php -text
-ship-simu/application/ship-simu/starter.php -text
-ship-simu/application/ship-simu/templates/.htaccess -text
-ship-simu/application/ship-simu/templates/de/.htaccess -text
-ship-simu/application/ship-simu/templates/de/html/.htaccess -text
-ship-simu/application/ship-simu/templates/de/html/selector_ship-simu.tpl -text
-ship-simu/db/.htaccess -text
-ship-simu/devel/.htaccess -text
-ship-simu/devel/class_Debug.php -text
-ship-simu/docs/THANKS -text
-ship-simu/inc/.htaccess -text
-ship-simu/inc/classes.php -text
-ship-simu/inc/classes/.htaccess -text
-ship-simu/inc/classes/exceptions/.htaccess -text
-ship-simu/inc/classes/exceptions/class_FrameworkException.php -text
-ship-simu/inc/classes/exceptions/compressor/.htaccess -text
-ship-simu/inc/classes/exceptions/compressor/class_MismatchingCompressorsException.php -text
-ship-simu/inc/classes/exceptions/container/.htaccess -text
-ship-simu/inc/classes/exceptions/container/class_ContainerItemIsNoArrayException.php -text
-ship-simu/inc/classes/exceptions/container/class_ContainerItemIsNullException.php -text
-ship-simu/inc/classes/exceptions/container/class_ContainerMaybeDamagedException.php -text
-ship-simu/inc/classes/exceptions/database/.htaccess -text
-ship-simu/inc/classes/exceptions/database/local_file/.htaccess -text
-ship-simu/inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php -text
-ship-simu/inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php -text
-ship-simu/inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php -text
-ship-simu/inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php -text
-ship-simu/inc/classes/exceptions/io/.htaccess -text
-ship-simu/inc/classes/exceptions/io/class_DirPointerNotOpenedException.php -text
-ship-simu/inc/classes/exceptions/io/class_FilePointerNotOpenedException.php -text
-ship-simu/inc/classes/exceptions/io/class_InvalidDataLengthException.php -text
-ship-simu/inc/classes/exceptions/io/class_InvalidDirectoryResourceException.php -text
-ship-simu/inc/classes/exceptions/io/class_InvalidMD5ChecksumException.php -text
-ship-simu/inc/classes/exceptions/io/class_PathIsEmptyException.php -text
-ship-simu/inc/classes/exceptions/io/class_PathIsNoDirectoryException.php -text
-ship-simu/inc/classes/exceptions/io/class_PathReadProtectedException.php -text
-ship-simu/inc/classes/exceptions/language/.htaccess -text
-ship-simu/inc/classes/exceptions/language/class_InvalidLanguagePathStringException.php -text
-ship-simu/inc/classes/exceptions/language/class_LanguagePathIsEmptyException.php -text
-ship-simu/inc/classes/exceptions/language/class_LanguagePathIsNoDirectoryException.php -text
-ship-simu/inc/classes/exceptions/language/class_LanguagePathReadProtectedException.php -text
-ship-simu/inc/classes/exceptions/main/.htaccess -text
-ship-simu/inc/classes/exceptions/main/class_ClassMismatchException.php -text
-ship-simu/inc/classes/exceptions/main/class_ClassNotFoundException.php -text
-ship-simu/inc/classes/exceptions/main/class_ConfigEntryIsEmptyException.php -text
-ship-simu/inc/classes/exceptions/main/class_ConfigEntryNotFoundException.php -text
-ship-simu/inc/classes/exceptions/main/class_DimNotFoundInArrayException.php -text
-ship-simu/inc/classes/exceptions/main/class_ExceptionNotChangedException.php -text
-ship-simu/inc/classes/exceptions/main/class_ExceptionNotFoundException.php -text
-ship-simu/inc/classes/exceptions/main/class_GetterNotFoundException.php -text
-ship-simu/inc/classes/exceptions/main/class_InvalidArrayCountException.php -text
-ship-simu/inc/classes/exceptions/main/class_InvalidObjectException.php -text
-ship-simu/inc/classes/exceptions/main/class_MissingArrayElementsException.php -text
-ship-simu/inc/classes/exceptions/main/class_MissingDecimalsThousandsSeperatorException.php -text
-ship-simu/inc/classes/exceptions/main/class_MissingMethodException.php -text
-ship-simu/inc/classes/exceptions/main/class_NoArrayCreatedException.php -text
-ship-simu/inc/classes/exceptions/main/class_NoArrayException.php -text
-ship-simu/inc/classes/exceptions/main/class_NoObjectException.php -text
-ship-simu/inc/classes/exceptions/main/class_NullPointerException.php -text
-ship-simu/inc/classes/exceptions/main/class_VariableIsNotSetException.php -text
-ship-simu/inc/classes/exceptions/template/.htaccess -text
-ship-simu/inc/classes/exceptions/template/class_BasePathIsEmptyException.php -text
-ship-simu/inc/classes/exceptions/template/class_BasePathIsNoDirectoryException.php -text
-ship-simu/inc/classes/exceptions/template/class_BasePathReadProtectedException.php -text
-ship-simu/inc/classes/exceptions/template/class_InvalidBasePathStringException.php -text
-ship-simu/inc/classes/exceptions/template/class_InvalidTemplateVariableNameException.php -text
-ship-simu/inc/classes/exceptions/template/class_UnexpectedTemplateTypeException.php -text
-ship-simu/inc/classes/interfaces/.htaccess -text
-ship-simu/inc/classes/interfaces/application/.htaccess -text
-ship-simu/inc/classes/interfaces/application/class_ManageableApplication.php -text
-ship-simu/inc/classes/interfaces/class_FrameworkInterface.php -text
-ship-simu/inc/classes/interfaces/compressor/.htaccess -text
-ship-simu/inc/classes/interfaces/compressor/class_Compressor.php -text
-ship-simu/inc/classes/interfaces/database/.htaccess -text
-ship-simu/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php -text
-ship-simu/inc/classes/interfaces/database/frontend/.htaccess -text
-ship-simu/inc/classes/interfaces/database/frontend/class_DatabaseFrontendInterface.php -text
-ship-simu/inc/classes/interfaces/database/middleware/.htaccess -text
-ship-simu/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php -text
-ship-simu/inc/classes/interfaces/debug/.htaccess -text
-ship-simu/inc/classes/interfaces/debug/class_Debugger.php -text
-ship-simu/inc/classes/interfaces/extended/.htaccess -text
-ship-simu/inc/classes/interfaces/extended/class_LimitableObject.php -text
-ship-simu/inc/classes/interfaces/io/.htaccess -text
-ship-simu/inc/classes/interfaces/io/class_Streamable.php -text
-ship-simu/inc/classes/interfaces/io/file/.htaccess -text
-ship-simu/inc/classes/interfaces/io/file/class_FileInputStreamer.php -text
-ship-simu/inc/classes/interfaces/io/file/class_FileOutputStreamer.php -text
-ship-simu/inc/classes/interfaces/io/output/.htaccess -text
-ship-simu/inc/classes/interfaces/io/output/class_OutputStreamer.php -text
-ship-simu/inc/classes/interfaces/language/.htaccess -text
-ship-simu/inc/classes/interfaces/language/class_ManageableLanguage.php -text
-ship-simu/inc/classes/interfaces/template/.htaccess -text
-ship-simu/inc/classes/interfaces/template/class_CompileableTemplate.php -text
-ship-simu/inc/classes/main/.htaccess -text
-ship-simu/inc/classes/main/class_BaseFrameworkSystem.php -text
-ship-simu/inc/classes/main/class_FrameworkArrayObject.php -text
-ship-simu/inc/classes/main/compressor/.htaccess -text
-ship-simu/inc/classes/main/compressor/class_Bzip2Compressor.php -text
-ship-simu/inc/classes/main/compressor/class_GzipCompressor.php -text
-ship-simu/inc/classes/main/compressor/class_NullCompressor.php -text
-ship-simu/inc/classes/main/console/.htaccess -text
-ship-simu/inc/classes/main/console/class_ConsoleTools.php -text
-ship-simu/inc/classes/main/database/.htaccess -text
-ship-simu/inc/classes/main/database/class_BaseDatabaseFrontend.php -text
-ship-simu/inc/classes/main/database/classes/.htaccess -text
-ship-simu/inc/classes/main/database/classes/class_LocalFileDatabase.php -text
-ship-simu/inc/classes/main/debug/.htaccess -text
-ship-simu/inc/classes/main/debug/class_DebugConsoleOutput.php -text
-ship-simu/inc/classes/main/debug/class_DebugErrorLogOutput.php -text
-ship-simu/inc/classes/main/debug/class_DebugWebOutput.php -text
-ship-simu/inc/classes/main/extended/.htaccess -text
-ship-simu/inc/classes/main/extended/class_ObjectLimits.php -text
-ship-simu/inc/classes/main/extended/class_SerializationContainer.php -text
-ship-simu/inc/classes/main/io/.htaccess -text
-ship-simu/inc/classes/main/io/class_FileIOStream.php -text
-ship-simu/inc/classes/main/io/class_FrameworkDirectoryPointer.php -text
-ship-simu/inc/classes/main/io/class_FrameworkFileInputPointer.php -text
-ship-simu/inc/classes/main/io/class_FrameworkFileOutputPointer.php -text
-ship-simu/inc/classes/main/language/.htaccess -text
-ship-simu/inc/classes/main/language/class_LanguageSystem.php -text
-ship-simu/inc/classes/main/output/.htaccess -text
-ship-simu/inc/classes/main/output/class_ConsoleOutput.php -text
-ship-simu/inc/classes/main/output/class_WebOutput.php -text
-ship-simu/inc/classes/main/template/.htaccess -text
-ship-simu/inc/classes/main/template/class_TemplateEngine.php -text
-ship-simu/inc/classes/middleware/.htaccess -text
-ship-simu/inc/classes/middleware/class_BaseMiddleware.php -text
-ship-simu/inc/classes/middleware/compressor/.htaccess -text
-ship-simu/inc/classes/middleware/compressor/class_CompressorChannel.php -text
-ship-simu/inc/classes/middleware/database/.htaccess -text
-ship-simu/inc/classes/middleware/database/class_DatabaseConnection.php -text
-ship-simu/inc/classes/middleware/debug/.htaccess -text
-ship-simu/inc/classes/middleware/debug/class_DebugMiddleware.php -text
-ship-simu/inc/classes/middleware/io/.htaccess -text
-ship-simu/inc/classes/middleware/io/class_FileIOHandler.php -text
-ship-simu/inc/config.php -text
-ship-simu/inc/config/.htaccess -text
-ship-simu/inc/config/class_FrameworkConfiguration.php -text
-ship-simu/inc/database.php -text
-ship-simu/inc/database/.htaccess -text
-ship-simu/inc/database/lib-local.php -text
-ship-simu/inc/file_io.php -text
-ship-simu/inc/includes.php -text
-ship-simu/inc/language.php -text
-ship-simu/inc/language/.htaccess -text
-ship-simu/inc/loader/.htaccess -text
-ship-simu/inc/loader/class_ClassLoader.php -text
-ship-simu/inc/output.php -text
-ship-simu/inc/selector.php -text
-ship-simu/index.php -text
-ship-simu/rebuild_doc.sh -text
-ship-simu/templates/.htaccess -text
-ship-simu/templates/_compiled/.htaccess -text
-ship-simu/templates/de/.htaccess -text
-ship-simu/templates/de/code/.htaccess -text
-ship-simu/templates/de/code/emergency_exit.ctp -text
-ship-simu/templates/de/code/footer_msg.ctp -text
-ship-simu/templates/de/code/header.ctp -text
-ship-simu/templates/de/html/.htaccess -text
-ship-simu/tests/contract-test.php -text
-ship-simu/tests/loader-test.php -text
-ship-simu/tests/personell-test.php -text
+/Doxyfile -text
+application/.htaccess -text
+application/selector/.htaccess -text
+application/selector/class_ApplicationHelper.php -text
+application/selector/class_ApplicationSelector.php -text
+application/selector/debug.php -text
+application/selector/exceptions.php -text
+application/selector/init.php -text
+application/selector/loader.php -text
+application/selector/starter.php -text
+application/selector/templates/.htaccess -text
+application/selector/templates/de/.htaccess -text
+application/selector/templates/de/code/.htaccess -text
+application/selector/templates/de/code/selector_apps.ctp -text
+application/selector/templates/de/code/selector_main.ctp -text
+application/ship-simu/.htaccess -text
+application/ship-simu/class_ApplicationHelper.php -text
+application/ship-simu/debug.php -text
+application/ship-simu/exceptions.php -text
+application/ship-simu/exceptions/.htaccess -text
+application/ship-simu/exceptions/class_BirthdayInvalidException.php -text
+application/ship-simu/exceptions/class_CabinShipMismatchException.php -text
+application/ship-simu/exceptions/class_ContractAllreadySignedException.php -text
+application/ship-simu/exceptions/class_ContractPartnerMismatchException.php -text
+application/ship-simu/exceptions/class_DeckShipMismatchException.php -text
+application/ship-simu/exceptions/class_EmptyStructuresListException.php -text
+application/ship-simu/exceptions/class_InvalidContractPartnerException.php -text
+application/ship-simu/exceptions/class_InvalidIDFormatException.php -text
+application/ship-simu/exceptions/class_ItemNotInPriceListException.php -text
+application/ship-simu/exceptions/class_ItemNotTradeableException.php -text
+application/ship-simu/exceptions/class_MissingSimulatorIDException.php -text
+application/ship-simu/exceptions/class_MotorShipMismatchException.php -text
+application/ship-simu/exceptions/class_NoShipyardsConstructedException.php -text
+application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php -text
+application/ship-simu/exceptions/class_RoomShipMismatchException.php -text
+application/ship-simu/exceptions/class_ShipNotConstructedException.php -text
+application/ship-simu/exceptions/class_ShipPartNotConstructableException.php -text
+application/ship-simu/exceptions/class_StructureShipMismatchException.php -text
+application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php -text
+application/ship-simu/exceptions/class_ToMuchEmployeesException.php -text
+application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php -text
+application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php -text
+application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php -text
+application/ship-simu/init.php -text
+application/ship-simu/interfaces/.htaccess -text
+application/ship-simu/interfaces/class_ConstructableShip.php -text
+application/ship-simu/interfaces/class_ConstructableShipPart.php -text
+application/ship-simu/interfaces/class_ContractPartner.php -text
+application/ship-simu/interfaces/class_Customer.php -text
+application/ship-simu/interfaces/class_ItemIsTradeable.php -text
+application/ship-simu/interfaces/class_Personellizer.php -text
+application/ship-simu/loader.php -text
+application/ship-simu/main/.htaccess -text
+application/ship-simu/main/class_ -text
+application/ship-simu/main/class_BasePersonell.php -text
+application/ship-simu/main/class_BaseSimulator.php -text
+application/ship-simu/main/class_Merchant.php -text
+application/ship-simu/main/class_WorksContract.php -text
+application/ship-simu/main/companies/.htaccess -text
+application/ship-simu/main/companies/class_ShippingCompany.php -text
+application/ship-simu/main/constructions/.htaccess -text
+application/ship-simu/main/constructions/berths/.htaccess -text
+application/ship-simu/main/constructions/berths/class_Berth.php -text
+application/ship-simu/main/constructions/class_BaseConstruction.php -text
+application/ship-simu/main/constructions/docks/.htaccess -text
+application/ship-simu/main/constructions/docks/class_DryDock.php -text
+application/ship-simu/main/constructions/harbors/.htaccess -text
+application/ship-simu/main/constructions/harbors/class_Harbor.php -text
+application/ship-simu/main/constructions/terminals/.htaccess -text
+application/ship-simu/main/constructions/terminals/class_Terminal.php -text
+application/ship-simu/main/constructions/yards/.htaccess -text
+application/ship-simu/main/constructions/yards/class_Shipyard.php -text
+application/ship-simu/main/drives/.htaccess -text
+application/ship-simu/main/drives/class_BaseDrive.php -text
+application/ship-simu/main/drives/motor/.htaccess -text
+application/ship-simu/main/drives/motor/class_Motor.php -text
+application/ship-simu/main/parts/.htaccess -text
+application/ship-simu/main/parts/class_BaseShipPart.php -text
+application/ship-simu/main/parts/maschineroom/.htaccess -text
+application/ship-simu/main/parts/maschineroom/class_MaschineRoom.php -text
+application/ship-simu/main/personell/.htaccess -text
+application/ship-simu/main/personell/class_SimulatorPersonell.php -text
+application/ship-simu/main/personell/company/.htaccess -text
+application/ship-simu/main/personell/company/class_CompanyEmployee.php -text
+application/ship-simu/main/ships/.htaccess -text
+application/ship-simu/main/ships/class_BaseShip.php -text
+application/ship-simu/main/ships/passenger/.htaccess -text
+application/ship-simu/main/ships/passenger/class_PassengerShip.php -text
+application/ship-simu/main/structures/.htaccess -text
+application/ship-simu/main/structures/class_BaseStructure.php -text
+application/ship-simu/main/structures/extended/.htaccess -text
+application/ship-simu/main/structures/extended/cabines/.htaccess -text
+application/ship-simu/main/structures/extended/cabines/class_BaseCabin.php -text
+application/ship-simu/main/structures/extended/cabines/ship/.htaccess -text
+application/ship-simu/main/structures/extended/cabines/ship/class_EconomyCabin.php -text
+application/ship-simu/main/structures/extended/cabines/ship/class_LowCabin.php -text
+application/ship-simu/main/structures/extended/cabines/ship/class_LuxuryCabin.php -text
+application/ship-simu/main/structures/extended/cabines/ship/class_PremierCabin.php -text
+application/ship-simu/main/structures/extended/class_ -text
+application/ship-simu/main/structures/extended/class_BaseCabinStructure.php -text
+application/ship-simu/main/structures/extended/class_BaseDeckStructure.php -text
+application/ship-simu/main/structures/extended/class_BaseUpperStructure.php -text
+application/ship-simu/main/structures/extended/decks/.htaccess -text
+application/ship-simu/main/structures/extended/decks/cargo/.htaccess -text
+application/ship-simu/main/structures/extended/decks/cargo/class_CarDeck.php -text
+application/ship-simu/main/structures/extended/decks/cargo/class_TrainDeck.php -text
+application/ship-simu/main/structures/extended/decks/cargo/class_TruckDeck.php -text
+application/ship-simu/main/structures/extended/decks/class_BaseDeck.php -text
+application/ship-simu/main/structures/extended/lower/.htaccess -text
+application/ship-simu/main/structures/extended/upper/.htaccess -text
+application/ship-simu/main/structures/extended/upper/class_Bridge.php -text
+application/ship-simu/starter.php -text
+application/ship-simu/templates/.htaccess -text
+application/ship-simu/templates/de/.htaccess -text
+application/ship-simu/templates/de/html/.htaccess -text
+application/ship-simu/templates/de/html/selector_ship-simu.tpl -text
+db/.htaccess -text
+devel/.htaccess -text
+devel/class_Debug.php -text
+docs/THANKS -text
+inc/.htaccess -text
+inc/classes.php -text
+inc/classes/.htaccess -text
+inc/classes/exceptions/.htaccess -text
+inc/classes/exceptions/class_FrameworkException.php -text
+inc/classes/exceptions/compressor/.htaccess -text
+inc/classes/exceptions/compressor/class_MismatchingCompressorsException.php -text
+inc/classes/exceptions/container/.htaccess -text
+inc/classes/exceptions/container/class_ContainerItemIsNoArrayException.php -text
+inc/classes/exceptions/container/class_ContainerItemIsNullException.php -text
+inc/classes/exceptions/container/class_ContainerMaybeDamagedException.php -text
+inc/classes/exceptions/database/.htaccess -text
+inc/classes/exceptions/database/local_file/.htaccess -text
+inc/classes/exceptions/database/local_file/class_SavePathIsEmptyException.php -text
+inc/classes/exceptions/database/local_file/class_SavePathIsNoDirectoryException.php -text
+inc/classes/exceptions/database/local_file/class_SavePathReadProtectedException.php -text
+inc/classes/exceptions/database/local_file/class_SavePathWriteProtectedException.php -text
+inc/classes/exceptions/io/.htaccess -text
+inc/classes/exceptions/io/class_DirPointerNotOpenedException.php -text
+inc/classes/exceptions/io/class_FilePointerNotOpenedException.php -text
+inc/classes/exceptions/io/class_InvalidDataLengthException.php -text
+inc/classes/exceptions/io/class_InvalidDirectoryResourceException.php -text
+inc/classes/exceptions/io/class_InvalidMD5ChecksumException.php -text
+inc/classes/exceptions/io/class_PathIsEmptyException.php -text
+inc/classes/exceptions/io/class_PathIsNoDirectoryException.php -text
+inc/classes/exceptions/io/class_PathReadProtectedException.php -text
+inc/classes/exceptions/language/.htaccess -text
+inc/classes/exceptions/language/class_InvalidLanguagePathStringException.php -text
+inc/classes/exceptions/language/class_LanguagePathIsEmptyException.php -text
+inc/classes/exceptions/language/class_LanguagePathIsNoDirectoryException.php -text
+inc/classes/exceptions/language/class_LanguagePathReadProtectedException.php -text
+inc/classes/exceptions/main/.htaccess -text
+inc/classes/exceptions/main/class_ClassMismatchException.php -text
+inc/classes/exceptions/main/class_ClassNotFoundException.php -text
+inc/classes/exceptions/main/class_ConfigEntryIsEmptyException.php -text
+inc/classes/exceptions/main/class_ConfigEntryNotFoundException.php -text
+inc/classes/exceptions/main/class_DimNotFoundInArrayException.php -text
+inc/classes/exceptions/main/class_ExceptionNotChangedException.php -text
+inc/classes/exceptions/main/class_ExceptionNotFoundException.php -text
+inc/classes/exceptions/main/class_GetterNotFoundException.php -text
+inc/classes/exceptions/main/class_InvalidArrayCountException.php -text
+inc/classes/exceptions/main/class_InvalidObjectException.php -text
+inc/classes/exceptions/main/class_MissingArrayElementsException.php -text
+inc/classes/exceptions/main/class_MissingDecimalsThousandsSeperatorException.php -text
+inc/classes/exceptions/main/class_MissingMethodException.php -text
+inc/classes/exceptions/main/class_NoArrayCreatedException.php -text
+inc/classes/exceptions/main/class_NoArrayException.php -text
+inc/classes/exceptions/main/class_NoObjectException.php -text
+inc/classes/exceptions/main/class_NullPointerException.php -text
+inc/classes/exceptions/main/class_VariableIsNotSetException.php -text
+inc/classes/exceptions/template/.htaccess -text
+inc/classes/exceptions/template/class_BasePathIsEmptyException.php -text
+inc/classes/exceptions/template/class_BasePathIsNoDirectoryException.php -text
+inc/classes/exceptions/template/class_BasePathReadProtectedException.php -text
+inc/classes/exceptions/template/class_InvalidBasePathStringException.php -text
+inc/classes/exceptions/template/class_InvalidTemplateVariableNameException.php -text
+inc/classes/exceptions/template/class_UnexpectedTemplateTypeException.php -text
+inc/classes/interfaces/.htaccess -text
+inc/classes/interfaces/application/.htaccess -text
+inc/classes/interfaces/application/class_ManageableApplication.php -text
+inc/classes/interfaces/class_FrameworkInterface.php -text
+inc/classes/interfaces/compressor/.htaccess -text
+inc/classes/interfaces/compressor/class_Compressor.php -text
+inc/classes/interfaces/database/.htaccess -text
+inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php -text
+inc/classes/interfaces/database/frontend/.htaccess -text
+inc/classes/interfaces/database/frontend/class_DatabaseFrontendInterface.php -text
+inc/classes/interfaces/database/middleware/.htaccess -text
+inc/classes/interfaces/database/middleware/class_DatabaseConnector.php -text
+inc/classes/interfaces/debug/.htaccess -text
+inc/classes/interfaces/debug/class_Debugger.php -text
+inc/classes/interfaces/extended/.htaccess -text
+inc/classes/interfaces/extended/class_LimitableObject.php -text
+inc/classes/interfaces/io/.htaccess -text
+inc/classes/interfaces/io/class_Streamable.php -text
+inc/classes/interfaces/io/file/.htaccess -text
+inc/classes/interfaces/io/file/class_FileInputStreamer.php -text
+inc/classes/interfaces/io/file/class_FileOutputStreamer.php -text
+inc/classes/interfaces/io/output/.htaccess -text
+inc/classes/interfaces/io/output/class_OutputStreamer.php -text
+inc/classes/interfaces/language/.htaccess -text
+inc/classes/interfaces/language/class_ManageableLanguage.php -text
+inc/classes/interfaces/template/.htaccess -text
+inc/classes/interfaces/template/class_CompileableTemplate.php -text
+inc/classes/main/.htaccess -text
+inc/classes/main/class_BaseFrameworkSystem.php -text
+inc/classes/main/class_FrameworkArrayObject.php -text
+inc/classes/main/compressor/.htaccess -text
+inc/classes/main/compressor/class_Bzip2Compressor.php -text
+inc/classes/main/compressor/class_GzipCompressor.php -text
+inc/classes/main/compressor/class_NullCompressor.php -text
+inc/classes/main/console/.htaccess -text
+inc/classes/main/console/class_ConsoleTools.php -text
+inc/classes/main/database/.htaccess -text
+inc/classes/main/database/class_BaseDatabaseFrontend.php -text
+inc/classes/main/database/classes/.htaccess -text
+inc/classes/main/database/classes/class_LocalFileDatabase.php -text
+inc/classes/main/debug/.htaccess -text
+inc/classes/main/debug/class_DebugConsoleOutput.php -text
+inc/classes/main/debug/class_DebugErrorLogOutput.php -text
+inc/classes/main/debug/class_DebugWebOutput.php -text
+inc/classes/main/extended/.htaccess -text
+inc/classes/main/extended/class_ObjectLimits.php -text
+inc/classes/main/extended/class_SerializationContainer.php -text
+inc/classes/main/io/.htaccess -text
+inc/classes/main/io/class_FileIOStream.php -text
+inc/classes/main/io/class_FrameworkDirectoryPointer.php -text
+inc/classes/main/io/class_FrameworkFileInputPointer.php -text
+inc/classes/main/io/class_FrameworkFileOutputPointer.php -text
+inc/classes/main/language/.htaccess -text
+inc/classes/main/language/class_LanguageSystem.php -text
+inc/classes/main/output/.htaccess -text
+inc/classes/main/output/class_ConsoleOutput.php -text
+inc/classes/main/output/class_WebOutput.php -text
+inc/classes/main/template/.htaccess -text
+inc/classes/main/template/class_TemplateEngine.php -text
+inc/classes/middleware/.htaccess -text
+inc/classes/middleware/class_BaseMiddleware.php -text
+inc/classes/middleware/compressor/.htaccess -text
+inc/classes/middleware/compressor/class_CompressorChannel.php -text
+inc/classes/middleware/database/.htaccess -text
+inc/classes/middleware/database/class_DatabaseConnection.php -text
+inc/classes/middleware/debug/.htaccess -text
+inc/classes/middleware/debug/class_DebugMiddleware.php -text
+inc/classes/middleware/io/.htaccess -text
+inc/classes/middleware/io/class_FileIOHandler.php -text
+inc/config.php -text
+inc/config/.htaccess -text
+inc/config/class_FrameworkConfiguration.php -text
+inc/database.php -text
+inc/database/.htaccess -text
+inc/database/lib-local.php -text
+inc/file_io.php -text
+inc/includes.php -text
+inc/language.php -text
+inc/language/.htaccess -text
+inc/loader/.htaccess -text
+inc/loader/class_ClassLoader.php -text
+inc/output.php -text
+inc/selector.php -text
+/index.php -text
+/rebuild_doc.sh -text
+templates/.htaccess -text
+templates/_compiled/.htaccess -text
+templates/de/.htaccess -text
+templates/de/code/.htaccess -text
+templates/de/code/emergency_exit.ctp -text
+templates/de/code/footer_msg.ctp -text
+templates/de/code/header.ctp -text
+templates/de/html/.htaccess -text
+tests/contract-test.php -text
+tests/loader-test.php -text
+tests/personell-test.php -text
diff --git a/Doxyfile b/Doxyfile
new file mode 100644 (file)
index 0000000..0312e4b
--- /dev/null
+++ b/Doxyfile
@@ -0,0 +1,1321 @@
+# Doxyfile 1.5.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file that 
+# follow. The default is UTF-8 which is also the encoding used for all text before 
+# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into 
+# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of 
+# possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = Ship-Simulator
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 0.1a
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = /var/www/htdocs/ship-simu/docs/
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, 
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, 
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, 
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = "The $name class " \
+                         "The $name widget " \
+                         "The $name file " \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = /var/www/htdocs/
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = YES
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = YES
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct (or union) is 
+# documented as struct with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code where the coding convention is that all structs are 
+# typedef'ed and only the typedef is referenced never the struct's name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = YES
+
+# If this flag is set to YES, the members of anonymous namespaces will be extracted 
+# and appear in the documentation as a namespace called 'anonymous_namespace{file}', 
+# where file will be replaced with the base name of the file that contains the anonymous 
+# namespace. By default anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = YES
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text "
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = /var/www/htdocs/ship-simu/docs/warn.log
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = /var/www/htdocs/ship-simu/
+
+# This tag can be used to specify the character encoding of the source files that 
+# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default 
+# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. 
+# See http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = *.php
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = */docs/* \
+                         */ship-simu.org/*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the output. 
+# The symbol name can be a fully qualified name, a word, or if the wildcard * is used, 
+# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH 
+# then you must also enable this option. If you don't then doxygen will produce 
+# a warning and turn it on anyway
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = YES
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 3
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = YES
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = YES
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to 
+# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to 
+# specify the directory where the mscgen tool resides. If left empty the tool is assumed to 
+# be found in the default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = NO
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = YES
+
+# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will 
+# generate a caller dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable caller graphs for selected 
+# functions only using the \callergraph command.
+
+CALLER_GRAPH           = YES
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the number 
+# of direct children of the root node in a graph is already larger than 
+# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = YES
diff --git a/application/.htaccess b/application/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/selector/.htaccess b/application/selector/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/selector/class_ApplicationHelper.php b/application/selector/class_ApplicationHelper.php
new file mode 100644 (file)
index 0000000..19b45b7
--- /dev/null
@@ -0,0 +1,169 @@
+<?php
+/**
+ * A class holding general data about the application and some methods for
+ * the management including the entry point.
+ *
+ * E.g.:
+ *
+ * index.php?app=my_app
+ *
+ * You need to create a folder in the folder "application" named "my_app"
+ * (without the quotes) and create a include file called
+ * class_ApplicationHelper.php. You have to write the same class for your
+ * application and implement the same interface called ManageableApplication
+ * because this class include file will be searched for.
+ *
+ * It is good when you avoid more GET parameters to keep URLs short and sweet.
+ * But sometimes you need some GET paramerers e.g. for your imprint or info page
+ * or other linked pages which you have to create and state some informations.
+ *
+ * Please remember that this include file is being loaded *before* the class
+ * loader is loading classes from "exceptions", "interfaces" and "main"!
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplication {
+       /**
+        * The version number of this application
+        */
+       private $appVersion = "";
+
+       /**
+        * The human-readable name for this application
+        */
+       private $appName = "";
+
+       /**
+        * The short uni*-like name of this application
+        */
+       private $shortName = "";
+
+       /**
+        * An instance of this class
+        */
+       private static $thisInstance = null;
+
+       /**
+        * Private constructor
+        *
+        * @return      void
+        */
+       private function __construct () {
+               // Call parent constructor
+               parent::constructor(__CLASS__);
+
+               // Set description
+               $this->setPartDescr("Application-Helper");
+
+               // Create an unique ID
+               $this->createUniqueID();
+
+               // Tidy up a little
+               $this->removeSystemArray();
+       }
+
+       /**
+        * Getter for an instance of this class
+        *
+        * @return      $thisInstance           An instance of this class
+        */
+       public final static function getInstance () {
+               // Is the instance there?
+               if (is_null(self::$thisInstance)) {
+                       self::$thisInstance = new ApplicationHelper();
+               }
+
+               // Return the instance
+               return self::$thisInstance;
+       }
+
+       /**
+        * Getter for the version number
+        *
+        * @return      $appVersion     The application's version number
+        */
+       public final function getAppVersion () {
+               return $this->appVersion;
+       }
+
+       /**
+        * Setter for the version number
+        *
+        * @param               $appVersion     The application's version number
+        * @return      void
+        */
+       public final function setAppVersion ($appVersion) {
+               // Cast and set it
+               $appVersion = (string) $appVersion;
+               $this->appVersion = $appVersion;
+       }
+
+       /**
+        * Getter for human-readable name
+        *
+        * @return      $appName        The application's human-readable name
+        */
+       public final function getAppName () {
+               return $this->appName;
+       }
+
+       /**
+        * Setter for human-readable name
+        *
+        * @param               $appName        The application's human-readable name
+        * @return      void
+        */
+       public final function setAppName ($appName) {
+               // Cast and set it
+               $appName = (string) $appName;
+               $this->appName = $appName;
+       }
+
+       /**
+        * Getter for short uni*-like name
+        *
+        * @return      $shortName      The application's short uni*-like name
+        */
+       public final function getAppShortName () {
+               return $this->shortName;
+       }
+
+       /**
+        * Setter for short uni*-like name
+        *
+        * @param               $shortName      The application's short uni*-like name
+        * @return      void
+        */
+       public final function setAppShortName ($shortName) {
+               // Cast and set it
+               $shortName = (string) $shortName;
+               $this->shortName = $shortName;
+       }
+
+       /**
+        * Launcher for the application selector
+        *
+        * @return      void
+        * @see         ApplicationSelector
+        */
+       public final function entryPoint () {
+               // Get a prepared instance of ApplicationSelector
+               $selInstance = ApplicationSelector::createApplicationSelector(LanguageSystem::getInstance(), FileIOHandler::getInstance());
+
+               // Remove the ignore list from the object
+               $selInstance->removeDirIgnoreList();
+
+               // Next load all templates for the respective short app names
+               $selInstance->loadApplicationTemplates();
+
+               // Then load the selector's own template
+               $selInstance->loadSelectorTemplate();
+
+               // Insert all application templates
+               $selInstance->insertApplicationTemplates();
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/selector/class_ApplicationSelector.php b/application/selector/class_ApplicationSelector.php
new file mode 100644 (file)
index 0000000..bd3a86b
--- /dev/null
@@ -0,0 +1,460 @@
+<?php
+/**
+ * The application selector class.
+ *
+ * Please remember that this include file is being loaded *before* the class
+ * loader is loading classes from "exceptions", "interfaces" and "main"!
+ *
+ * @todo       Extend a later BaseFrameworkApplication class
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+class ApplicationSelector extends BaseFrameworkSystem {
+       /**
+        * An ArrayObject for all found applications
+        */
+       private $foundApps = null;
+
+       /**
+        * An array object for all loaded application templates (selector_app-name.tpl)
+        */
+       private $loadedTemplates = null;
+
+       /**
+        * The application selector's own template engine handler
+        */
+       private $selectorTplEngine = null;
+
+       /**
+        * A list of items we shall ignore while reading from directories
+        */
+       private $dirIgnoreList = array(
+               ".",
+               "..",
+               ".htaccess"
+       );
+
+       /**
+        * The language instance for the template loader
+        */
+       private $langInstance = null;
+
+       /**
+        * The file I/O instance for the template loader
+        */
+       private $fileIOInstance = null;
+
+       /**
+        * The private constructor. No direct instances can be created from this.
+        *
+        * @return      void
+        */
+       private function __construct() {
+               // Call parent constructor
+               parent::constructor(__CLASS__);
+
+               // Set description
+               $this->setPartDescr("Applikationswechsler");
+
+               // Create unique ID number
+               $this->createUniqueID();
+
+               // Remove system array and thousand seperator
+               $this->removeSystemArray();
+               $this->removeNumberFormaters();
+
+               // Initialize the array lists
+               $this->initializeAppsList();
+               $this->initializeTemplatesList();
+       }
+
+       /**
+        * Create a prepared instance of ApplicationSelector
+        *
+        * @param               $langInstance           The language sub-system: LanguageSystem
+        * @param               $fileIOInstance The file I/O instance
+        * @return              $selInstance            An instance of ApplicationSelector
+        */
+       public static function createApplicationSelector (ManageableLanguage $langInstance, FileIOHandler $fileIOInstance) {
+               // Get a new instance
+               $selInstance = new ApplicationSelector();
+
+               // Get all applications
+               $selInstance->readApplicationDirectory();
+
+               // Set language and file I/O instances
+               $selInstance->setLanguageInstance($langInstance);
+               $selInstance->setFileIOInstance($fileIOInstance);
+
+               // Return the prepared instance
+               return $selInstance;
+       }
+
+       /**
+        * Initialize the application list
+        *
+        * @return      void
+        */
+       private function initializeAppsList () {
+               $this->foundApps = new FrameworkArrayObject();
+       }
+
+       /**
+        * Initialize the loaded templates list
+        *
+        * @return      void
+        */
+       private function initializeTemplatesList () {
+               $this->loadedTemplates = new FrameworkArrayObject();
+       }
+
+       /**
+        * Private getter for language instance
+        *
+        * @return      $langInstance   An instance to the language sub-system
+        */
+       private function getLanguageInstance () {
+               return $this->langInstance;
+       }
+
+       /**
+        * Private getter for file IO instance
+        *
+        * @return      $fileIOInstance An instance to the file I/O sub-system
+        */
+       private function getFileIOInstance () {
+               return $this->fileIOInstance;
+       }
+
+       /**
+        * Prepare the template engine (TemplateEngine by default) for a give
+        * application helper instance (ApplicationHelper by default).
+        *
+        * @param               $appInstance    An application helper instance
+        * @return              $tplEngine      The template engine instance
+        * @throws              NullPointerException    If the template engine could not
+        *                                                                              be initialized
+        * @throws              NoObjectException               If $tplEngine is not an object
+        * @throws              MissingMethodException  If $tplEngine misses a required
+        *                                                                              method 'loadWebTemplate()'
+        */
+       private function prepareTemplateEngine (BaseFrameworkSystem $appInstance) {
+               // Generate FQFN for all application templates
+               $fqfn = sprintf("%s%s/%s/%s",
+                       PATH,
+                       $this->getConfigInstance()->readConfig("application_path"),
+                       strtolower($appInstance->getAppShortName()),
+                       $this->getConfigInstance()->readConfig("tpl_base_path")
+               );
+
+               // Initialize the template engine
+               $tplEngine = null;
+               $eval = sprintf("\$tplEngine = %s::create%s(
+       \"%s\",
+       \$this->getLanguageInstance(),
+       \$this->getFileIOInstance()
+);",
+                       $this->getConfigInstance()->readConfig("tpl_engine"),
+                       $this->getConfigInstance()->readConfig("tpl_engine"),
+                       $fqfn
+               );
+
+               // Debug message
+               if ((!is_null($this->getDebugInstance())) && (defined('DEBUG_EVAL'))) {
+                       $this->getDebugInstance()->output(sprintf("[%s:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
+                               $this->__toString(),
+                               htmlentities($eval)
+                       ));
+               }
+
+               // Run the command
+               @eval($eval);
+
+               // Is it a valid instance?
+               if (is_null($tplEngine)) {
+                       // No class returned
+                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+               } elseif (!is_object($tplEngine)) {
+                       // Not an object! ;-(
+                       throw new NoObjectException($tplEngine, self::EXCEPTION_IS_NO_OBJECT);
+               } elseif (!method_exists($tplEngine, 'loadWebTemplate')) {
+                       // Nope, so throw exception
+                       throw new MissingMethodException(array($tplEngine, 'loadWebTemplate'), self::EXCEPTION_MISSING_METHOD);
+               }
+
+               // Return the prepared instance
+               return $tplEngine;
+       }
+
+       /**
+        * Load the init.php script of an application and append the application
+        * instance to $foundApps
+        *
+        * @param               $initScript     The FQFN of init.php
+        * @param               $appName                The application's Uni* name
+        * @return      void
+        * @throws      AppVarIsNotSetException If 'app' is not set
+        * @throws      NullPointerException    If 'app' is null
+        * @throws      NoObjectException               If 'app' is not an object
+        * @throws      MissingMethodException  If a required method is missing
+        */
+       private function loadInitScript ($initScript, $appName) {
+               // Is it a file and readable?
+               if ((is_file($initScript)) && (is_readable($initScript))) {
+                       // Then include it
+                       include ($initScript);
+
+                       // We now should have $app re-defined!
+                       if (!isset($app)) {
+                               // This application shall not be loaded
+                               return;
+                       } elseif (is_null($app)) {
+                               // The class instance is null
+                               throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+                       } elseif (!is_object($app)) {
+                               // Not an object
+                               throw new NoObjectException($app, self::EXCEPTION_IS_NO_OBJECT);
+                       } elseif (!method_exists($app, $this->getConfigInstance()->readConfig("entry_method"))) {
+                               // Method not found!
+                               throw new MissingMethodException(array($app, $this->getConfigInstance()->readConfig("entry_method")), self::EXCEPTION_MISSING_METHOD);
+                       }
+
+                       // Add the current instance to the list
+                       $this->foundApps->append($app);
+
+               } // END - if ((is_file(...
+       }
+
+       /**
+        * Setter for the selector's template engine instance
+        *
+        * @param               $tplEngine      An instance of TemplateEngine
+        */
+       private function setSelectorTemplateEngine (CompileableTemplate $tplEngine) {
+               $this->selectorTplEngine = $tplEngine;
+       }
+
+       /**
+        * Getter for the selector's template engine instance
+        *
+        * @return      $selectTplEngine        The selector's template engine
+        */
+       private function getSelectorTemplateEngine () {
+               return $this->selectorTplEngine;
+       }
+
+       /**
+        * Getter for the $loadedTemplates array object
+        *
+        * @return      $loadedTemplates        An array object holding all loaded
+        *                                                      application templates
+        */
+       private function getLoadedTemplates () {
+               return $this->loadedTemplates;
+       }
+
+       /**
+        * Method for compatiblity with prepareTemplateEngine()
+        *
+        * @return      $shortName      This selector's short name
+        */
+       private function getAppShortName() {
+               $shortName = $this->getConfigInstance()->readConfig("selector_path");
+               return $shortName;
+       }
+
+       /**
+        * Add a directory/file to the ignore list
+        *
+        * @param               $ignoreItem     The file/directory we shall ignore
+        * @return      void
+        */
+       public function addDirIgnoreList ($ignoreItem) {
+               // Cast and add it
+               $ignoreItem = (string) $ignoreItem;
+               $this->dirIgnoreList[] = $ignoreItem;
+       }
+
+       /**
+        * Setter for language instance
+        *
+        * @param               $langInstance   An instance to the language sub-system
+        * @return      void
+        * @see         LanguageSystem
+        */
+       public function setLanguageInstance (ManageableLanguage $langInstance) {
+               $this->langInstance = $langInstance;
+       }
+
+       /**
+        * Setter for file I/O instance
+        *
+        * @param               $fileIOInstance An instance to the file I/O sub-system
+        * @return      void
+        */
+       public function setFileIOInstance (FileIOHandler $fileIOInstance) {
+               $this->fileIOInstance = $fileIOInstance;
+       }
+
+       /**
+        * Read the base path for all applications (application/) and create a
+        * list of all found applications
+        *
+        * @return      void
+        */
+       public function readApplicationDirectory () {
+               // Generate the base path for all applications
+               $appBasePath = sprintf("%s%s/",
+                       PATH,
+                       $this->getConfigInstance()->readConfig("application_path")
+               );
+
+               // Add the selector path to the ignore list
+               $this->addDirIgnoreList($this->getConfigInstance()->readConfig("selector_path"));
+
+               // Get a directory pointer for the application path
+               $dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($appBasePath);
+
+               // Backup and remove the 'app' from global name space
+               /*$appBackup = $app;
+               unset($app);*/
+
+               // Read all directories&files except some parts
+               while ($appName = $dirInstance->readDirectoryExcept($this->dirIgnoreList)) {
+                       // Generate FQFN for the application name (or better directory name)
+                       $fqfn = sprintf("%s%s", $appBasePath, $appName);
+
+                       // Is this a readable directory? (files will be ignored silently)
+                       if ((is_dir($fqfn)) && (is_readable($fqfn))) {
+                               // Then get the init.php script for analyzing
+                               $initScript = sprintf("%s/init%s", $fqfn, $this->getConfigInstance()->readConfig("php_extension"));
+
+                               // Load the application's init.php script and append the
+                               // application to the ArrayObject
+                               $this->loadInitScript($initScript, $appName);
+
+                       } // END - if ((is_dir(...
+
+               } // END - while
+
+               // Close directory pointer
+               $dirInstance->closeDirectory();
+
+               // Restore old 'app' from backup
+               //$app = $appBackup;
+       }
+
+       /**
+        * Load all templates for found applications in previous scan
+        *
+        * @return      void
+        */
+       public function loadApplicationTemplates () {
+               // Iterate through all applications
+               for ($idx = $this->foundApps->getIterator(); $idx->valid(); $idx->next()) {
+                       // Get current application
+                       $appInstance = $idx->current();
+
+                       // Prepare the template engine for the current template
+                       $tplEngine = $this->prepareTemplateEngine($appInstance);
+
+                       // Try to load the web template
+                       $tplEngine->loadWebTemplate(sprintf("%s_%s",
+                               $this->getConfigInstance()->readConfig("tpl_selector_prefix"),
+                               strtolower($appInstance->getAppShortName())
+                       ));
+
+                       // Remember this template and the application for later usage
+                       $this->loadedTemplates->append(array(
+                               'tpl_engine'   => $tplEngine,
+                               'app_instance' => $appInstance
+                       ));
+               }
+
+               // Re-initialize the application list to avoid double loading
+               $this->initializeAppsList();
+       }
+
+       /**
+        * Removes $dirIgnoreList from the object to save some memory
+        *
+        * @return      void
+        */
+       public function removeDirIgnoreList () {
+               unset($this->dirIgnoreList);
+       }
+
+       /**
+        * Loads the selector's own main template. This step is not linking the
+        * application's templates into the main one.
+        *
+        * @return      void
+        */
+       public function loadSelectorTemplate () {
+               // Prepare the template engine
+               $tplEngine = $this->prepareTemplateEngine($this);
+
+               // Load the selector's template
+               $tplEngine->loadCodeTemplate($this->getConfigInstance()->readConfig("selector_main_tpl"));
+
+               // Now store it in the class
+               $this->setSelectorTemplateEngine($tplEngine);
+       }
+
+       /**
+        * Inserts all loaded application templates into the selector's template
+        *
+        * @return      void
+        * @throws      NullPointerException            If $curr is null
+        * @throws      NoArrayException                        If $curr is not an array
+        * @throws      InvalidArrayCountException      If $curr contains an
+        *                                                                      unexpected count of elements
+        * @throws      MissingArrayElementsException   If $curr is missing expected
+        *                                                                      array elements
+        */
+       public function insertApplicationTemplates () {
+               // First prepare the instance
+               $tplEngine = $this->prepareTemplateEngine($this);
+
+               // Load template which shall later hold all application templates
+               $tplEngine->loadCodeTemplate($this->getConfigInstance()->readConfig("selector_apps_tpl"));
+
+               // Add all loaded application templates together
+               $dummy = "";
+               for ($idx = $this->getLoadedTemplates()->getIterator(); $idx->valid(); $idx->next()) {
+                       // Get current item from array object
+                       $curr = $idx->current();
+
+                       // Do some sanity checks on the loaded item
+                       if (is_null($curr)) {
+                               // $curr is null
+                               throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+                       } elseif (!is_array($curr)) {
+                               // Not an array
+                               throw new NoArrayException($curr, self::EXCEPTION_IS_NO_ARRAY);
+                       } elseif (count($curr) != 2) {
+                               // Not expected count of entries
+                               throw new InvalidArrayCountException(array($this, "curr", count($curr), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+                       } elseif (!isset($curr['tpl_engine']) || (!isset($curr['app_instance']))) {
+                               // Expected entries missing
+                               throw new MissingArrayElementsException(array($this, "curr", array('tpl_engine', 'app_instance')), self::EXCEPTION_ARRAY_ELEMENTS_MISSING);
+                       }
+                       die("<pre>".print_r($curr, true)."</pre>");
+
+               } // END - for
+       }
+
+       /**
+        * Stub!
+        */
+       public function saveObjectToDatabase () {
+               $this->getDebugInstance()->output(sprintf("[%s:] Stub <strong>%s</strong> erreicht.",
+                       $this->__toString(),
+                       __FUNCTION__
+               ));
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/selector/debug.php b/application/selector/debug.php
new file mode 100644 (file)
index 0000000..2322bb5
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+// Initialize some debug constants here
+
+// [EOF]
+?>
diff --git a/application/selector/exceptions.php b/application/selector/exceptions.php
new file mode 100644 (file)
index 0000000..c0d5422
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+// Set the new handler
+//set_exception_handler('selector_exception_handler');
+
+// [EOF]
+?>
diff --git a/application/selector/init.php b/application/selector/init.php
new file mode 100644 (file)
index 0000000..a1255a9
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+// Application initializer
+//
+// Please remember that this include file is being loaded *before* the class
+// loader is loading classes from "exceptions", "interfaces" and "main"!
+//
+// Get an instance of the initializer
+$eval = sprintf("\$app = %s::getInstance();",
+       FrameworkConfiguration::getInstance()->readConfig("app_helper_class")
+);
+eval($eval);
+
+// Set application name and version
+$app->setAppName("Applikationsausw&auml;hler");
+$app->setAppVersion("0.1a");
+$app->setAppShortName(FrameworkConfiguration::getInstance()->readConfig("selector_name"));
+
+// Initialize output system
+require(PATH . "inc/output.php");
+
+// Initialize file i/o system
+require(PATH . "inc/file_io.php");
+
+// Include the language sub-system
+require(PATH . "inc/language.php");
+
+// [EOF]
+?>
diff --git a/application/selector/loader.php b/application/selector/loader.php
new file mode 100644 (file)
index 0000000..46f5bf8
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+// The application's class loader
+if (!isset($application)) {
+       // We need this!
+       ApplicationEntryPoint::app_die("[Main:] Interne Variable <strong>application</strong> nicht gefunden!");
+}
+
+// Load all classes
+ClassLoader::getInstance()->loadClasses(sprintf("%s/%s/", FrameworkConfiguration::getInstance()->readConfig("application_path"), $application));
+
+// Include all classes
+ClassLoader::getInstance()->includeAllClasses();
+
+// Clean up the global namespace
+unset($lowerClasses);
+unset($class);
+
+// [EOF]
+?>
diff --git a/application/selector/starter.php b/application/selector/starter.php
new file mode 100644 (file)
index 0000000..1e6e523
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+// Is there an application helper instance? We need the method main() for
+// maining the application
+$app = ApplicationHelper::getInstance();
+
+// Some sanity checks
+if ((empty($app)) || (is_null($app))) {
+       // Something went wrong!
+       ApplicationEntryPoint::app_die(sprintf("[Main:] Die Applikation <strong>%s</strong> kann nicht gestartet werden, da die Hilfsklasse <strong>%s</strong> nicht geladen ist!",
+               $application,
+               FrameworkConfiguration::getInstance()->readConfig("app_helper_class")
+       ));
+} elseif (!is_object($app)) {
+       // No object!
+       ApplicationEntryPoint::app_die(sprintf("[Main:] Die Applikation <strong>%s</strong> kann nicht gestartet werden, da die &#39;app&#39; kein Objekt ist!",
+               $application
+       ));
+} elseif (!method_exists($app, FrameworkConfiguration::getInstance()->readConfig("entry_method"))) {
+       // Method not found!
+       ApplicationEntryPoint::app_die(sprintf("[Main:] Die Applikation <strong>%s</strong> kann nicht gestartet werden, da die Methode <strong>%s</strong> fehlt!",
+               $application,
+               FrameworkConfiguration::getInstance()->readConfig("entry_method")
+       ));
+}
+
+// Call the entry point method
+try {
+       $eval = sprintf("%s::getInstance()->%s();",
+               FrameworkConfiguration::getInstance()->readConfig("app_helper_class"),
+               FrameworkConfiguration::getInstance()->readConfig("entry_method")
+       );
+       eval($eval);
+} catch (FrameworkException  $e) {
+       ApplicationEntryPoint::app_die(sprintf("[Main:] Die Applikation <strong>%s</strong> kann nicht gestartet werden. Grund: <u>%s</u>",
+               $application,
+               $e->getMessage()
+       ));
+}
+
+
+// [EOF]
+?>
diff --git a/application/selector/templates/.htaccess b/application/selector/templates/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/selector/templates/de/.htaccess b/application/selector/templates/de/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/selector/templates/de/code/.htaccess b/application/selector/templates/de/code/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/selector/templates/de/code/selector_apps.ctp b/application/selector/templates/de/code/selector_apps.ctp
new file mode 100644 (file)
index 0000000..00d37a1
--- /dev/null
@@ -0,0 +1,2 @@
+<!-- This template is a frame template for all application templates //-->
+$content[apps_list]
diff --git a/application/selector/templates/de/code/selector_main.ctp b/application/selector/templates/de/code/selector_main.ctp
new file mode 100644 (file)
index 0000000..6e10877
--- /dev/null
@@ -0,0 +1,15 @@
+<!-- A compileable template for the application selector //-->
+
+{?header:title={--WELCOME_APPLICATION_SELECTOR--}?}
+
+{?navigation:nav_row=home;imprint;contact?}
+
+<div class="selector_header">
+       {--HEADER_APPLICATION_SELECTOR--}
+</div>
+
+<div class="selector_list_apps">
+       {?selector_apps?}
+</div>
+
+{?footer_msg:footer_msg={--FOOTER_APPLICATION_SELECTOR--}?}
diff --git a/application/ship-simu/.htaccess b/application/ship-simu/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/ship-simu/class_ApplicationHelper.php b/application/ship-simu/class_ApplicationHelper.php
new file mode 100644 (file)
index 0000000..a177d34
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+/**
+ * A class holding general data about the application and some methods for
+ * the management including the entry point.
+ *
+ * E.g.:
+ *
+ * index.php?app=my_app
+ *
+ * You need to create a folder in the folder "application" named "my_app"
+ * (without the quotes) and create a include file called
+ * class_ApplicationHelper.php. You have to write the same class for your
+ * application and implement the same interface called ManageableApplication
+ * because this class include file will be searched for.
+ *
+ * It is good when you avoid more GET parameters to keep URLs short and sweet.
+ * But sometimes you need some GET paramerers e.g. for your imprint or info page
+ * or other linked pages which you have to create and state some informations.
+ *
+ * Please remember that this include file is being loaded *before* the class
+ * loader is loading classes from "exceptions", "interfaces" and "main"!
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplication {
+       /**
+        * The version number of this application
+        */
+       private $appVersion = "";
+
+       /**
+        * The human-readable name for this application
+        */
+       private $appName = "";
+
+       /**
+        * The short uni*-like name for this application
+        */
+       private $shortName = "";
+
+       /**
+        * An instance of this class
+        */
+       private static $thisInstance = null;
+
+       /**
+        * Private constructor
+        *
+        * @return      void
+        */
+       private function __construct () {
+               // Call parent constructor
+               parent::constructor(__CLASS__);
+
+               // Set description
+               $this->setPartDescr("Application-Helper");
+
+               // Create an unique ID
+               $this->createUniqueID();
+
+               // Tidy up a little
+               $this->removeSystemArray();
+       }
+
+       /**
+        * Getter for an instance of this class
+        *
+        * @return      $thisInstance           An instance of this class
+        */
+       public final static function getInstance () {
+               // Is the instance there?
+               if (is_null(self::$thisInstance)) {
+                       self::$thisInstance = new ApplicationHelper();
+               }
+
+               // Return the instance
+               return self::$thisInstance;
+       }
+
+       /**
+        * Getter for the version number
+        *
+        * @return      $appVersion     The application's version number
+        */
+       public final function getAppVersion () {
+               return $this->appVersion;
+       }
+
+       /**
+        * Setter for the version number
+        *
+        * @param               $appVersion     The application's version number
+        * @return      void
+        */
+       public final function setAppVersion ($appVersion) {
+               // Cast and set it
+               $appVersion = (string) $appVersion;
+               $this->appVersion = $appVersion;
+       }
+
+       /**
+        * Getter for human-readable name
+        *
+        * @return      $appName        The application's human-readable name
+        */
+       public final function getAppName () {
+               return $this->appName;
+       }
+
+       /**
+        * Setter for human-readable name
+        *
+        * @param               $appName        The application's human-readable name
+        * @return      void
+        */
+       public final function setAppName ($appName) {
+               // Cast and set it
+               $appName = (string) $appName;
+               $this->appName = $appName;
+       }
+
+       /**
+        * Getter for short uni*-like name
+        *
+        * @return      $shortName      The application's short uni*-like name
+        */
+       public final function getAppShortName () {
+               return $this->shortName;
+       }
+
+       /**
+        * Setter for short uni*-like name
+        *
+        * @param               $shortName      The application's short uni*-like name
+        * @return      void
+        */
+       public final function setAppShortName ($shortName) {
+               // Cast and set it
+               $shortName = (string) $shortName;
+               $this->shortName = $shortName;
+       }
+
+       /**
+        * Launches the ship-simulator game
+        *
+        * @return      void
+        */
+       public final function entryPoint () {
+               // Must still be implemented!
+               trigger_error(__METHOD__.": Not implemented yet!");
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/debug.php b/application/ship-simu/debug.php
new file mode 100644 (file)
index 0000000..5c6e9c8
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+// Initialize some debug constants here
+
+// Reederei-Objekt debuggen
+//define('DEBUG_COMPANY_OBJ', true);
+// Hafen-Objekt debuggen
+//define('DEBUG_HARBOR_OBJ', true);
+// Schiff-Objekt debuggen
+//define('DEBUG_SHIP_OBJ', true);
+// Auftrag-Objekt debuggen
+//define('DEBUG_CONTRACT_OBJ', true);
+// Haendler-Objekt debuggen
+//define('DEBUG_MERCHANT_OBJ', true);
+// Personal-Objekt debuggen
+//define('DEBUG_PERSONELL_OBJ', true);
+// Personal debuggen
+//define('DEBUG_PERSONELL', true);
+// Reederei debuggen
+//define('DEBUG_COMPANY', true);
+// Mitarbeiter debuggen
+//define('DEBUG_COMPANY_EMPLOYEE', true);
+// Hafen debuggen
+//define('DEBUG_HARBOR', true);
+// Werft debuggen
+//define('DEBUG_SHIPYARD', true);
+// Schiff debuggen
+//define('DEBUG_SHIP', true);
+// Schiffstruktur debuggen
+//define('DEBUG_STRUCTURE', true);
+// Kabinen debuggen
+//define('DEBUG_CABIN', true);
+// Decks debuggen
+//define('DEBUG_DECK', true);
+// Bauauftraege debuggen
+//define('DEBUG_CONTRACT', true);
+// Haendler debuggen
+//define('DEBUG_MERCHANT', true);
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions.php b/application/ship-simu/exceptions.php
new file mode 100644 (file)
index 0000000..df23634
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+
+// Set the new handler
+//set_exception_handler('shipsimu_exception_handler');
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/.htaccess b/application/ship-simu/exceptions/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/ship-simu/exceptions/class_BirthdayInvalidException.php b/application/ship-simu/exceptions/class_BirthdayInvalidException.php
new file mode 100644 (file)
index 0000000..032d5e4
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class BirthdayInvalidException extends FrameworkException {
+       public function __construct ($birthArray, $code) {
+               // Cast the array
+               $birthArray = (array) $birthArray;
+
+               // Add a message around the missing class
+               $message = sprintf("Das Geburtsdatum <u>%s</u> ist leider falsch.",
+                       date("d.m.Y", mktime(
+                               0, 0, 0,
+                               $birthArray[1],
+                               $birthArray[2],
+                               $birthArray[0]
+                       ))
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_CabinShipMismatchException.php b/application/ship-simu/exceptions/class_CabinShipMismatchException.php
new file mode 100644 (file)
index 0000000..25890a9
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class CabinShipMismatchException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ContractAllreadySignedException.php b/application/ship-simu/exceptions/class_ContractAllreadySignedException.php
new file mode 100644 (file)
index 0000000..03b4f6e
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ContractAllreadySignedException extends FrameworkException {
+       public function __construct ($classArray, $code) {
+               // Cast the array
+               $classArray = (array) $classArray;
+
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Die Vertragsparteien <u>%s</u> und <u>%s</u> haben den Vertrag bereits unterzeichnet!",
+                       $classArray[0]->__toString(),
+                       $classArray[1]->getCompanyName(),
+                       $classArray[2]->getCompanyName()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ContractPartnerMismatchException.php b/application/ship-simu/exceptions/class_ContractPartnerMismatchException.php
new file mode 100644 (file)
index 0000000..2195fbb
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ContractPartnerMismatchException extends FrameworkException {
+       public function __construct ($classArray, $code) {
+               // Cast the array
+               $classArray = (array) $classArray;
+
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Der Vertragspartner von <u>%s</u> ist ung&uuml;tig (<u>%s</u>) und darf diesen Vertrag nicht unterzeichnen!",
+                       $classArray[0]->__toString(),
+                       $classArray[1]->getCompanyName(),
+                       $classArray[2]->getCompanyName()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_DeckShipMismatchException.php b/application/ship-simu/exceptions/class_DeckShipMismatchException.php
new file mode 100644 (file)
index 0000000..f4967aa
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class DeckShipMismatchException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_EmptyStructuresListException.php b/application/ship-simu/exceptions/class_EmptyStructuresListException.php
new file mode 100644 (file)
index 0000000..d84efb7
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class EmptyStructuresListException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Die Strukturen-Liste ist leer.",
+                       $class->__toString()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_InvalidContractPartnerException.php b/application/ship-simu/exceptions/class_InvalidContractPartnerException.php
new file mode 100644 (file)
index 0000000..0b1c304
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class InvalidContractPartnerException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] <u>%s</u> ist kein g&uuml;tiger Vertragspartner.",
+                       $class->__toString(),
+                       $class->getPartDescr()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_InvalidIDFormatException.php b/application/ship-simu/exceptions/class_InvalidIDFormatException.php
new file mode 100644 (file)
index 0000000..3ce2e0d
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class InvalidIDFormatException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Ung&uuml;ltige ID-Nummer &uuml;bergeben.",
+                       $class->__toString()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ItemNotInPriceListException.php b/application/ship-simu/exceptions/class_ItemNotInPriceListException.php
new file mode 100644 (file)
index 0000000..500ba92
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ItemNotInPriceListException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[Merchant:] Preis f&uuml;r den Artikel <u>%s</u> <em><u>%s</u></em> nicht gefunden.",
+                       $class->__toString(),
+                       $class->getPartDescr()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ItemNotTradeableException.php b/application/ship-simu/exceptions/class_ItemNotTradeableException.php
new file mode 100644 (file)
index 0000000..a83485f
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ItemNotTradeableException extends FrameworkException {
+       public function __construct ($classArray, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] <u>%s</u> ist nicht handelbar!",
+                       $classArray[0]->__toString(),
+                       $classArray[1]->getPartDescr()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_MissingSimulatorIDException.php b/application/ship-simu/exceptions/class_MissingSimulatorIDException.php
new file mode 100644 (file)
index 0000000..d656dde
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class MissingSimulatorIDException extends FrameworkException {
+       public function __construct ($classArray, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Die Simulator-ID <u>%s</u> scheint ung&uuml;ltig zu sein.",
+                       $classArray[0]->__toString(),
+                       $classArray[1]
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_MotorShipMismatchException.php b/application/ship-simu/exceptions/class_MotorShipMismatchException.php
new file mode 100644 (file)
index 0000000..ce48791
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class MotorShipMismatchException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_NoShipyardsConstructedException.php b/application/ship-simu/exceptions/class_NoShipyardsConstructedException.php
new file mode 100644 (file)
index 0000000..32e1339
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+// Unsere eigene Exception!
+class NoShipyardsConstructedException extends FrameworkException {
+       public function __construct ($class, $code) {
+               if (is_object($class)) {
+                       // Add a message around the missing class
+                       $message = sprintf("[%s:] Keine Werften gefunden!",
+                               $class->__toString()
+                       );
+               } else {
+                       // No class given
+                       $message = sprintf("Please provide a class for <u>%s</u>", __CLASS__);
+               }
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php b/application/ship-simu/exceptions/class_PersonellListAlreadyCreatedException.php
new file mode 100644 (file)
index 0000000..3ac9078
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+// A crew list has already been initialized
+class PersonellListAlreadyCreatedException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Die interne Crew-Liste wurde bereits initialisiert.",
+                       $class->__toString()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_RoomShipMismatchException.php b/application/ship-simu/exceptions/class_RoomShipMismatchException.php
new file mode 100644 (file)
index 0000000..19d5eed
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class RoomShipMismatchException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ShipNotConstructedException.php b/application/ship-simu/exceptions/class_ShipNotConstructedException.php
new file mode 100644 (file)
index 0000000..07b9bb9
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class ShipNotConstructedException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ShipPartNotConstructableException.php b/application/ship-simu/exceptions/class_ShipPartNotConstructableException.php
new file mode 100644 (file)
index 0000000..338386e
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ShipPartNotConstructableException extends FrameworkException {
+       public function __construct (array $partArray, $code) {
+               // Add a message around the missing class
+               $message = sprintf("Schiffteil <u>%s</u> ist nicht constrierbar!",
+                       $partArray[0]
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_StructureShipMismatchException.php b/application/ship-simu/exceptions/class_StructureShipMismatchException.php
new file mode 100644 (file)
index 0000000..273c405
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+
+// Unsere eigene Exception!
+class StructureShipMismatchException extends FrameworkException {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php b/application/ship-simu/exceptions/class_StructuresOutOfBoundsException.php
new file mode 100644 (file)
index 0000000..8b5d4cd
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class StructuresOutOfBoundsException extends FrameworkException {
+       public function __construct ($idx, $code) {
+               // Add a message around the missing class
+               $message = sprintf("Der Index <u>%s</u> liegt ausserhalb des g&uuml;tigen Bereiches! Schiffsteil nicht auffindbar.", $idx);
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_ToMuchEmployeesException.php b/application/ship-simu/exceptions/class_ToMuchEmployeesException.php
new file mode 100644 (file)
index 0000000..227c379
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class ToMuchEmployeesException extends FrameworkException {
+       public function __construct ($amountArray, $code) {
+               // Cast the array
+               $amountArray = (array) $amountArray;
+
+               // Add a message around the missing class
+               $message = sprintf("<u>%d</u> Leute nicht einstellbar, da nur <u>%d</u> arbeitslos sind!",
+                       $amountArray[0],
+                       $amountArray[1]
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php b/application/ship-simu/exceptions/class_TotalPriceNotCalculatedException.php
new file mode 100644 (file)
index 0000000..c649bed
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class TotalPriceNotCalculatedException extends FrameworkException {
+       public function __construct ($class, $code) {
+               // Add a message around the missing class
+               $message = sprintf("[%s:] Gesamtpreis ist nicht ermittelbar.",
+                       $class->__toString()
+               );
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php b/application/ship-simu/exceptions/class_UnsupportedLimitationPartException.php
new file mode 100644 (file)
index 0000000..152a898
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class UnsupportedLimitationPartException extends FrameworkException {
+       public function __construct ($str, $code) {
+               // Add a message around the missing class
+               $message = sprintf("Limitierungsinformation <u>%s</u> wird derzeit nicht unterst&uuml;tzt.", $str);
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php b/application/ship-simu/exceptions/class_WrongGenderSpecifiedException.php
new file mode 100644 (file)
index 0000000..ae12ce5
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+
+// An exception class for lost classes... ;-)
+class WrongGenderSpecifiedException extends FrameworkException {
+       public function __construct ($gender, $code) {
+               // Add a message around the missing class
+               $message = sprintf("Das Geschlecht <u>%s</u> Ist nicht <em>M</em> (M&auml;nnlich) oder <em>F</em> (Weiblich).", $gender);
+
+               // Call parent constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/init.php b/application/ship-simu/init.php
new file mode 100644 (file)
index 0000000..0446060
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+// Application initializer
+//
+// Please remember that this include file is being loaded *before* the class
+// loader is loading classes from "exceptions", "interfaces" and "main"!
+//
+// You can prevent adding this application to the selector by uncommenting the
+// following line:
+//
+// if ((isset($this)) && (is_object($this)) && ($this->isClass("ApplicationSelector"))) { return; }
+//
+// isset() is required to prevent a warning and is_object() is highly required
+// when the application itself is requested in URL (hint: index.php?app=your_app)
+//
+// Get an instance of the helper
+$eval = sprintf("\$app = %s::getInstance();",
+       FrameworkConfiguration::getInstance()->readConfig("app_helper_class")
+);
+eval($eval);
+
+// Set application name and version
+$app->setAppName("Ship-Simu Schiffsimulator");
+$app->setAppVersion("0.1");
+$app->setAppShortName("ship-simu");
+
+// Initialize output system
+require(PATH . "inc/output.php");
+
+// Initialize file i/o system
+require(PATH . "inc/file_io.php");
+
+// Include the language sub-system
+require(PATH . "inc/language.php");
+
+// This application needs a database connection then we have to simply include
+// the inc/database.php script
+require(PATH . "inc/database.php");
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/.htaccess b/application/ship-simu/interfaces/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/ship-simu/interfaces/class_ConstructableShip.php b/application/ship-simu/interfaces/class_ConstructableShip.php
new file mode 100644 (file)
index 0000000..9804433
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+/**
+ * An interface for constructable ships
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface ConstructableShip extends FrameworkInterface {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/class_ConstructableShipPart.php b/application/ship-simu/interfaces/class_ConstructableShipPart.php
new file mode 100644 (file)
index 0000000..0721b8c
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+/**
+ * An interface for constructable ship parts
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface ConstructableShipPart extends FrameworkInterface {
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/class_ContractPartner.php b/application/ship-simu/interfaces/class_ContractPartner.php
new file mode 100644 (file)
index 0000000..9b1bb8c
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+/**
+ * An interface for contract partners
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface ContractPartner extends FrameworkInterface {
+       /**
+        * This is a contract partner
+        *
+        * @param               $contractInstance       Must be a valid instance of WorksContract
+        * @return      boolean                 true  = can be a contract partner,
+        *                                                      false = no partner for contracts
+        */
+       function isContractPartner (WorksContract $contractInstance);
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/class_Customer.php b/application/ship-simu/interfaces/class_Customer.php
new file mode 100644 (file)
index 0000000..a49150e
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * An interface for all customers
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface Customer extends FrameworkInterface {
+       /**
+        * Adds a contract to the customer's list
+        *
+        * @param               $contractInstance       A valid instance to WorksContract
+        * @return      void
+        */
+       function addNewWorksContract (WorksContract $contractInstance);
+
+       /**
+        * Signs a works contract.
+        *
+        * @param               $contractInstance                               A valid instance to WorksContract
+        * @param               $partnerInstance                                An instance the other
+        *                                                                              contract partner
+        * @return      void
+        * @throws      NullPointerException                    If an instance variable
+        *                                                                              is null
+        * @throws      NoObjectException                               If an instance variable
+        *                                                                              is not an object
+        * @throws      MissingMethodException                  If a required method was
+        *                                                                              not found in $contractInstance
+        * @throws      InvalidContractPartnerException If the in $contractInstance
+        *                                                                              set contract partner is
+        *                                                                              not the expected
+        */
+       function signContract (WorksContract $contractInstance, ContractPartner $partnerInstance);
+
+       /**
+        * Withdraw from a signed contract
+        *
+        * @param               $contractInstance       A valid instance to WorksContract
+        * @return      void
+        */
+       function withdrawFromContract (WorksContract $contractInstance);
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/class_ItemIsTradeable.php b/application/ship-simu/interfaces/class_ItemIsTradeable.php
new file mode 100644 (file)
index 0000000..8952000
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * An interface for tradeable items
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface ItemIsTradeable extends FrameworkInterface {
+       /**
+        * Is this item (=object) tradeable?
+        *
+        * @return      boolean true  = is a tradeable object,
+        *                                      false = is not tradeable
+        */
+       function isTradeable ();
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/interfaces/class_Personellizer.php b/application/ship-simu/interfaces/class_Personellizer.php
new file mode 100644 (file)
index 0000000..f4474e7
--- /dev/null
@@ -0,0 +1,184 @@
+<?php
+/**
+ * An interface for all personells
+ *
+ * @author     Roland Haeder <roland __NOSPAM__ [at] __REMOVE_ME__ mxchange [dot] org>
+ * @version    0.1
+ */
+interface Personellizer extends FrameworkInterface {
+         ///////////////////////
+        /// General methods ///
+       ///////////////////////
+
+       /**
+        * Remove min/max age
+        *
+        * @return      void
+        */
+       function removeMinMaxAge ();
+
+       /**
+        * Create a valid birthday
+        *
+        * @return void
+        */
+       function createBirthday ();
+
+       /**
+        * Verify if given year/month/day is a valid date combination
+        *
+        * @param               $year   4-digit year (valid  : 2007, 1946,
+        *                                                    invalid: 24, 2a, aa)
+        * @param               $month  1 to 2-digit month (range: 1 to 12)
+        * @param               $day            1 to 2-digit day (range: 1 to 31/30/29/28)
+        * @return      boolean true  = date is valid,
+        *                                      false = date is invalid
+        */
+       function isDateValid ($year, $month, $day);
+
+         /////////////////////////
+        //// Status requests ////
+       /////////////////////////
+
+       /**
+        * Is the person employed?
+        *
+        * @return      boolean true  = person is employed
+        *                                      false = person is umemployed
+        */
+       function isEmployed ();
+
+       /**
+        * Is the person married? (to which one doesn't matter here)
+        *
+        * @return      boolean true  = person is married
+        *                                      false = person is not married
+        */
+       function isMarried ();
+
+       /**
+        * Is the person a male?
+        *
+        * @return      boolean true  = person is male
+        *                                      false = person is not male (maybe female? ;-))
+        */
+       function isMale ();
+
+       /**
+        * Is the person a female?
+        *
+        * @return      boolean true  = person is female
+        *                                      false = person is not female (maybe male? ;-))
+        */
+       function isFemale ();
+
+         /////////////////
+        //// Getters ////
+       /////////////////
+
+       /**
+        * Getter for surname
+        *
+        * @return      $surname        The person's surname
+        */
+       function getSurname ();
+
+       /**
+        * Getter for family name
+        *
+        * @return      $family The person's family name
+        */
+       function getFamily ();
+
+       /**
+        * Getter for gender
+        *
+        * @return      $gender The person's gender (F/M)
+        */
+       function getGender ();
+
+       /**
+        * Getter for salary
+        *
+        * @return      $salary The person's current salary
+        */
+       function getSalary ();
+
+         /////////////////
+        //// Setters ////
+       /////////////////
+
+       /**
+        * Setter for surname
+        *
+        * @param               $surname        The person's new surname as a string
+        * @return      void
+        */
+       function setSurname ($surname);
+
+       /**
+        * Setter for family name
+        *
+        * @param               $family The person's new family name as a string
+        * @return      void
+        */
+       function setFamily ($family);
+
+       /**
+        * Setter for gender. Do not use this so often... ;-)
+        * This method shall only be used when the person is "created"
+        *
+        * @param               $gender The person's new gender as a 1-char string (M/F)
+        * @return      void
+        */
+       function setGender ($gender);
+
+       /**
+        * Setter for employment status
+        *
+        * @param               $employed       The person's new employment stats
+        * @return      void
+        */
+       function setEmployed ($employed);
+
+       /**
+        * Setter for marrital status
+        *
+        * @param               $married        The person's new marrital status
+        * @return      void
+        */
+       function setMarried ($married);
+
+       /**
+        * Setter for a already validated birthday.
+        *
+        * @param               $year   The person's new year-of-birth (4 digits)
+        * @param               $month  The person's new month-of-birth (1 to 2 digits)
+        * @param               $day            The person's new day-of-birth (1 to 2 digits)
+        * @return      void
+        */
+       function setBirthday ($year, $month, $day);
+
+         /////////////////////////////////////
+        //// Methods for changing salary ////
+       /////////////////////////////////////
+
+       /**
+        * Increase person's salary by a specified amount
+        *
+        * @param               $add            Add this float amount to current salary
+        * @return      void
+        */
+       function increaseSalary ($add);
+
+       /**
+        * Decrease person's salary by a specified amount
+        *
+        * @param               $sub            Subtract this float amount to current salary
+        * @return      void
+        */
+       function decreaseSalary ($sub);
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/loader.php b/application/ship-simu/loader.php
new file mode 100644 (file)
index 0000000..41dca7d
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+// The application's class loader
+if (!isset($application)) {
+       // We need this!
+       ApplicationEntryPoint::app_die("[Main:] Interne Variable <strong>application</strong> nicht gefunden!");
+}
+
+// Load all classes for the application
+foreach ($lowerClasses as $class) {
+       // Try to load the application classes
+       try {
+               ClassLoader::getInstance()->loadClasses(sprintf("%s/%s/%s", FrameworkConfiguration::getInstance()->readConfig("application_path"), $application, $class));
+       } catch (PathIsNoDirectoryException $e) {
+               ApplicationEntryPoint::app_die(sprintf("[Main:] Kann Applikationsklassen im Pfad <strong>%s</strong> nicht laden. Grund: <strong>%s</strong>",
+                       $class,
+                       $e->getMessage()
+               ));
+       } catch (PathIsEmptyException $e) {
+               ApplicationEntryPoint::app_die(sprintf("[Main:] Kann Applikationsklassen im Pfad <strong>%s</strong> nicht laden. Grund: <strong>%s</strong>",
+                       $class,
+                       $e->getMessage()
+               ));
+       } catch (PathReadProtectedException $e) {
+               ApplicationEntryPoint::app_die(sprintf("[Main:] Kann Applikationsklassen im Pfad <strong>%s</strong> nicht laden. Grund: <strong>%s</strong>",
+                       $class,
+                       $e->getMessage()
+               ));
+       } catch (DirPointerNotOpenedException $e) {
+               ApplicationEntryPoint::app_die(sprintf("[Main:] Kann Applikationsklassen im Pfad <strong>%s</strong> nicht laden. Grund: <strong>%s</strong>",
+                       $class,
+                       $e->getMessage()
+               ));
+       }
+}
+
+// Include all classes
+ClassLoader::getInstance()->includeAllClasses();
+
+// Clean up the global namespace
+unset($lowerClasses);
+unset($class);
+
+// [EOF]
+?>
diff --git a/application/ship-simu/main/.htaccess b/application/ship-simu/main/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/ship-simu/main/class_ b/application/ship-simu/main/class_
new file mode 100644 (file)
index 0000000..9644fd5
--- /dev/null
@@ -0,0 +1,7 @@
+
+       /**
+        * Limits this object with an ObjectLimits instance
+        */
+       public function limitObject (ObjectLimits $limitInstance) {
+               die("limitObject() reached! Stub!");
+       }
diff --git a/application/ship-simu/main/class_BasePersonell.php b/application/ship-simu/main/class_BasePersonell.php
new file mode 100644 (file)
index 0000000..6f78c65
--- /dev/null
@@ -0,0 +1,240 @@
+<?php
+// What every kind of personell have
+class BasePersonell extends BaseFrameworkSystem implements Personellizer {
+       // Maximum/minimum age
+       private $MIN_AGE = 21;
+       private $MAX_AGE = 40;
+
+       // Male/female
+       private $gender     = ""; // M=Male, F=Female, empty=uninitialized
+
+       // Year/month/day of birth
+       private $yearBirth  = 0;
+       private $monthBirth = 0;
+       private $dayBirth   = 0;
+
+       // Surname/family name
+       private $surname    = "";
+       private $family     = "";
+
+       // Employed?
+       private $employed   = false;
+
+       // Married?
+       private $married    = false;
+
+       // Her/his salary
+       private $salary     = 0.00;
+
+       // Constructor
+       private function __construct ($class) {
+               // Call parent constructor
+               parent::constructor($class);
+
+               // Debug message
+               if ((defined('DEBUG_PERSONELL')) && (defined('DEBUG_CONSTRUCT'))) $this->getDebugInstance()->output("[PersonellBase:] Konstruktor erreicht.<br />\n");
+
+               // Beschreibung setzen
+               $this->setPartDescr("Personal");
+       }
+
+       // Calls the constructor
+       public function constructor ($class) {
+               $this->__construct($class);
+       }
+
+       // Remove min/max ages
+       public final function removeMinMaxAge () {
+               if (defined('DEBUG_PERSONELL')) $this->getDebugInstance()->output(sprintf("[%s:%d] Minimum-/Maximum-Alter entfernt.<br />\n",
+                       __CLASS__,
+                       __LINE__
+               ));
+               unset($this->MIN_AGE);
+               unset($this->MAX_AGE);
+       }
+
+       // Generates a birthday based on MAX_AGE/MIN_AGE and the current date
+       public final function createBirthday () {
+               // Is the birthday already set?
+               if ($this->isDateValid($this->yearBirth, $this->monthBirth, $this->dayBirth)) return false;
+
+               // Get current year
+               $currYear = date("Y", time());
+
+               // Generate random year/month/day
+               $year = mt_rand(($currYear - $this->MIN_AGE), ($currYear - $this->MAX_AGE));
+               $month = 0;
+               $day = 0;
+               while (!$this->isDateValid($year, $month, $day)) {
+                       $month = mt_rand(1, 12);
+                       switch ($month) {
+                       case 1:
+                       case 3:
+                       case 5:
+                       case 7:
+                       case 8:
+                       case 10:
+                       case 12:
+                               $day   = mt_rand(1, 31);
+                               break;
+
+                       case 4:
+                       case 6:
+                       case 9:
+                       case 11:
+                               $day   = mt_rand(1, 30);
+                               break;
+
+                       case 2: // February
+                               if ($year % 4 == 0) {
+                                       // Is a "Schaltjahr"
+                                       $day = mt_rand(1, 29);
+                               } else {
+                                       // Regular year
+                                       $day = mt_rand(1, 28);
+                               }
+                               break;
+                       } // switch - END
+               } // while - END
+
+               // Set the new birthday
+               $this->setBirthday($year, $month, $day);
+       }
+
+       // Is the current day valid?
+       public final function isDateValid ($year, $month, $day) {
+               // Create timestamp
+               $stamp = mktime(0, 0, 0, $month, $day, $year);
+
+               // Get year/month/day back
+               $y = date("Y", $stamp);
+               $m = date("m", $stamp);
+               $d = date("d", $stamp);
+
+               // Compare all
+               return (($y == $year) && ($m == $month) && ($d == $day));
+       }
+
+       // Employed?
+       public final function isEmployed () {
+               return $this->employed;
+       }
+
+       // Married?
+       public final function isMarried () {
+               return $this->married;
+       }
+
+       // Male?
+       public final function isMale () {
+               return ($this->gender == "M");
+       }
+
+       // Female
+       public final function isFemale () {
+               return ($this->gender == "F");
+       }
+
+       // Setter for surname
+       public final function setSurname ($surname) {
+               $this->surname = (string) $surname;
+       }
+
+       // Getter for surname
+       public function getSurname () {
+               return $this->surname;
+       }
+
+       // Setter for family name
+       public final function setFamily ($family) {
+               $this->family = (string) $family;
+       }
+
+       // Getter for family name
+       public final function getFamily () {
+               return $this->family;
+       }
+
+       // Setter for gender
+       public final function setGender ($gender) {
+               // Set random gender here
+               if (($gender == "M") || ($gender == "F") || ((empty($gender)) && ($this->getSurname() == ""))) {
+                       $this->gender = $gender;
+               } else {
+                       throw new WrongGenderSpecifiedException($gender, self::EXCEPTION_GENDER_IS_WRONG);
+               }
+       }
+
+       // Getter for gender
+       public final function getGender () {
+               return $this->gender;
+       }
+
+       // Setter for employment status
+       public final function setEmployed ($employed) {
+               $this->employed = (boolean) $employed;
+       }
+
+       // Setter for marriage status
+       public final function setMarried ($married) {
+               $this->married = (boolean) $married;
+       }
+
+       // Getter for salary
+       public final function getSalary () {
+               return $this->salary;
+       }
+
+       // Increase salary
+       public final function increaseSalary ($add) {
+               $this->salary += (float) abs($add);
+       }
+
+       // Decrease salary
+       public final function decreaseSalary ($sub) {
+               $this->salary -= (float) abs($sub);
+       }
+
+       // Setter for birthday
+       public final function setBirthday ($year, $month, $day) {
+               $this->yearBirth  = (int) abs($year);
+               $this->monthBirth = (int) abs($month);
+               $this->dayBirth   = (int) abs($day);
+       }
+
+       // Remove gender
+       public function removeGender () {
+               unset($this->gender);
+       }
+
+       // Remove both names
+       public function removeNames () {
+               unset($this->surname);
+               unset($this->family);
+       }
+
+       // Remove complete birthday
+       public function removeBirthday () {
+               unset($this->yearBirth);
+               unset($this->monthBirth);
+               unset($this->dayBirth);
+       }
+
+       // Remove salary
+       public function removeSalary () {
+               unset($this->salary);
+       }
+
+       // Remove employment status
+       public function removeEmployed () {
+               unset($this->employed);
+       }
+
+       // Remove marrital status
+       public function removeMarried () {
+               unset($this->married);
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/main/class_BaseSimulator.php b/application/ship-simu/main/class_BaseSimulator.php
new file mode 100644 (file)
index 0000000..4726d29
--- /dev/null
@@ -0,0 +1,392 @@
+<?php
+
+// Ein sehr abstraktes Objekt, Abmasse, Beschreibung und Teil-Instanz werden hier gespeichert
+class BaseSimulator extends BaseFrameworkSystem {
+       // Schiffsteilinstanz
+       private $partInstance = null;
+
+       // Abmasse (Breite/Hoehe/Laenge)
+       private $width  = 0;
+       private $height = 0;
+       private $length = 0;
+
+       // Aktuelles Schiff und Schiffsteil
+       private $currShip = null;
+       private $currPart = null;
+
+       // Faktoren zur Erweiterung der Masse. Beispielsweise soll der Maschinenraum groesser wie der Motor sein
+       private $resizeFactorArray = array(
+               'width'  => 1,
+               'height' => 1,
+               'length' => 1
+       );
+
+       // Konstruktor
+       private function __construct ($class) {
+               // Call highest constructor
+               parent::constructor($class);
+
+               if ((defined('DEBUG_CORE')) && (defined('DEBUG_CONSTRUCT'))) $this->getDebugInstance()->output(sprintf("[%s:] Konstruktor erreicht.<br />\n",
+                       $this->__toString()
+               ));
+
+               // Set part description and class name
+               $this->setPartDescr("Simulator-Basis-Einheit");
+
+               // Etwas aufraeumen, dies sollte ganz zum Schluss erfolgen!
+               $this->removeResizeFactorArray();
+               $this->removeCurrPart();
+               $this->removeCurrShip();
+       }
+
+       // Public constructor
+       public function constructor ($class) {
+               // Call real constructor
+               $this->__construct($class);
+       }
+
+       // Magic __isset method
+       private function __isset ($var) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Checking <strong>%s</strong> in class.<br />\n",
+                       $this->__toString(), $var
+               ));
+               return isset($this->$var);
+       }
+
+       // Magic __unset method
+       private function __unset($var) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Removing <strong>%s</strong> from class.<br />\n",
+                       $this->__toString(), $var
+               ));
+               unset($this->$var);
+       }
+
+       // Setter-Methode fuer Laenge
+       public function setLength ($length) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> L&auml;nge gesetzt.<br />\n",
+                       $this->__toString(),
+                       $length
+               ));
+               $this->length = (float) $length;
+       }
+
+       // Setter-Methode fuer Breite
+       public function setWidth ($width) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> Breite gesetzt.<br />\n",
+                       $this->__toString(),
+                       $width
+               ));
+               $this->width = (float) $width;
+       }
+
+       // Setter-Methode fuer Hoehe
+       public function setHeight ($height) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] <strong>%dm</strong> H&ouml;he gesetzt.<br />\n",
+                       $this->__toString(),
+                       $height
+               ));
+               $this->height = (float) $height;
+       }
+
+       // Getter-Methode fuer Laenge
+       public function getLength () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge angefordert.<br />\n",
+                       $this->__toString()
+               ));
+               return $this->length;
+       }
+
+       // Getter-Methode fuer Breite
+       public function getWidth () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge angefordert.<br />\n",
+                       $this->__toString()
+               ));
+               return $this->width;
+       }
+
+       // Getter-Methode fuer Hoehe
+       public function getHeight () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] H&ouml;he angefordert.<br />\n",
+                       $this->__toString()
+               ));
+               return $this->height;
+       }
+
+       // Setter-Methode fuer Teil-Instanz
+       public function setPartInstance ($struct) {
+               $this->partInstance = (Object) $struct;
+       }
+
+       // Getter-Methode fuer Teil-Instanz
+       public function getPartInstance () {
+               if (!isset($this->partInstance)) {
+                       return null;
+               }
+               return $this->partInstance;
+       }
+
+       // Remover-Methode fuer die Teil-Instanz
+       public function removePartInstance () {
+               if ($this->getPartInstance() !== null) {
+                       // Warnung ausgeben
+                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] partInstance ist nicht null! Instanz-Attribut wird nicht entfernt.<br />\n",
+                               $this->__toString()
+                       ));
+               } else {
+                       // Leere Instanz kann entfernt werden
+                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] partInstance wurde entfernt.<br />\n",
+                               $this->__toString()
+                       ));
+                       unset($this->partInstance);
+               }
+       }
+
+       // Prueft ob all Umberechnungsfaktoren gesetzt sind
+       private function isResizeFactorValid () {
+               return (($this->getResizeFactorElement('width')  > 1)
+                       || ($this->getResizeFactorElement('height') > 1)
+                       || ($this->getResizeFactorElement('length') > 1)
+               );
+       }
+
+       // Baut einen Motor in das Schiff ein
+       public function addShipPartToShip (ConstructableShip $shipInstance, ConstructableShipPart $partInstance) {
+               // Schiff/-steil merken
+               $this->currShip = $shipInstance;
+               $this->currPart = $partInstance;
+
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Maschinenraum mit Motor <strong>%s</strong> wird fuer das Schiff <strong>%s</strong> konstruiert.<br />\n",
+                       $this->__toString(),
+                       $this->currPart->getPartDescr(),
+                       $this->currShip->getShipName()
+               ));
+
+               // Passt ueberhaupt das Schiffsteil in's Schiff?
+               if ($this->isShipPartSizeValid()) {
+                       // Berechnungen fuer umliegendes Objekt anpassen
+                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> vom Typ <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.<br />\n",
+                               $this->__toString(),
+                               $this->currPart->getPartDescr(),
+                               $this->currPart->__toString(),
+                               $this->currShip->getShipName()
+                       ));
+
+                       // Muessen die Masse angepasst werden?
+                       if ($this->isResizeFactorValid()) {
+                               // Neue Angaben berechnen (wir lassen etwas Lust fuer Kabelbaeume, Roehren, Maschinisten, etc.)
+                               $this->newWidth  = (float) $this->currPart->getWidth()  * $this->resizeFactorArray['width'];
+                               $this->newHeight = (float) $this->currPart->getHeight() * $this->resizeFactorArray['height'];
+                               $this->newLength = (float) $this->currPart->getLength() * $this->resizeFactorArray['length'];
+
+                               // Passt dies nun immer noch?
+                               if ($this->isNewSizeValid()) {
+                                       // Das passt auch, dann Werte setzen und Motor-Instanz merken
+                                       if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> passt in das Schiff <strong>%s</strong> hinein.<br />\n",
+                                               $this->__toString(),
+                                               $this->getPartDescr(),
+                                               $this->currShip->getShipName()
+                                       ));
+                                       $this->setWidth($this->newWidth);
+                                       $this->setHeight($this->newHeight);
+                                       $this->setLength($this->newLength);
+
+                                       // Einige Dinge entfernen...
+                                       $this->removeAllNewAttr();
+                               } else {
+                                       // Passt nicht! Also wieder Exception werfen...
+                                       throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil <strong>%s</strong> vom Typ <strong>%s</strong> ist zu gross f&uuml;r das Schiff!",
+                                               $this->currPart->__toString(),
+                                               $this->currPart->getPartDescr(),
+                                               $this->currPart->__toString()
+                                       ), 2);
+                               }
+                       } elseif ($this->currPart != null) {
+                               // Aktuelle Masse setzen
+                               $this->setWidth($this->currPart->getWidth());
+                               $this->setHeight($this->currPart->getHeight());
+                               $this->setLength($this->currPart->getLength());
+                       }
+
+                       // Existiert ein Schiffsteil?
+                       if (!is_null($this->currPart)) {
+                               // Debug-Meldung ausgeben
+                               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Schiffsteil <strong>%s</strong> gefunden.<br />\n",
+                                       $this->currPart->realClass,
+                                       $this->currPart->getPartDescr()
+                               ));
+
+                               // Schiffsteil-Instanz setzen
+                               $this->setPartInstance($this->currPart);
+
+                               // Instanzen entfernen
+                               $this->currPart->removeCurrShip();
+                               $this->currPart->removeCurrPart();
+                               $this->currPart->removePartInstance();
+                               $this->currPart->removeResizeFactorArray();
+                       }
+               } else {
+                       // Exception werfen!
+                       throw new StructureShipMismatchException(sprintf("[%s:] Das Schiffsteil <u>%s</u> vom Typ <u>%s</u> passt nicht in das Schiff!",
+                               $this->currPart->realClass,
+                               $this->currPart->getPartDescr(),
+                               $this->currPart->__toString()
+                       ), 1);
+               }
+
+               // Nochmals etwas aufraeumen
+               $this->removeResizeFactorArray();
+               $this->removeCurrShip();
+               $this->removeCurrPart();
+       }
+
+       // Array fuer Umrechnungstabelle entfernen
+       public function removeResizeFactorArray () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeResizeFactor erreicht.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->resizeFactorArray);
+       }
+
+       // Alle newXXX-Attribute entfernen
+       public function removeAllNewAttr () {
+               unset($this->newWidth);
+               unset($this->newHeight);
+               unset($this->newLength);
+       }
+
+       // Aktuelle Schiff-Instanz entfernen
+       public function removeCurrShip () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeCurrShip erreicht.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->currShip);
+       }
+
+       // Aktuelle Schiff-Instanz entfernen
+       public function removeCurrPart () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] removeCurrPart erreicht.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->currPart);
+       }
+
+       // Breite entfernen
+       public function removeWidth () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Breite entfernt.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->width);
+       }
+
+       // Hoehe entfernen
+       public function removeHeight () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] H&ouml;he entfernt.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->height);
+       }
+
+       // Laenge entfernen
+       public function removeLength () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] L&auml;nge entfernt.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->length);
+       }
+
+       // Tiefgang entfernen
+       public function removeDraught () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Tiefgang entfernt.<br />\n",
+                       $this->__toString()
+               ));
+               unset($this->draught);
+       }
+
+       // Getter-Methode fuer Element aus resizeFactor
+       public function getResizeFactorElement ($el) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] getResizeFactorElement erreicht. (element=%s)<br />\n",
+                       $this->__toString(),
+                       $el
+               ));
+               if (isset($this->resizeFactorArray[$el])) {
+                       // Element gefunden
+                       return $this->resizeFactorArray[$el];
+               } else {
+                       // Element nicht gefunden!
+                       return 0;
+               }
+       }
+
+       // Setter-Methode fuer Element in resizeFactor
+       public function setResizeFactorElement ($el, $value) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] Umberechnungsfaktor <strong>%s</strong>=<strong>%s</strong> gesetzt.<br />\n",
+                       $this->__toString(),
+                       $el,
+                       $value
+               ));
+               $this->resizeFactorArray[$el] = (float) $value;
+       }
+
+       // Kontrolliert, ob die Abmasse Schiffsteil->Schiff stimmen
+       public function isShipPartSizeValid () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] isShipPartSizeValid erreicht.<br />\n",
+                       $this->__toString()
+               ));
+               return (
+                       (
+                               ( // Already defined ship messurings
+                                          ($this->currPart->getWidth()  < $this->currShip->getWidth())
+                                       && ($this->currPart->getHeight() < $this->currShip->getDraught())
+                                       && ($this->currPart->getLength() < $this->currShip->getLength())
+                               ) || ( // Ship messurings shall be calculated
+                                          ($this->currShip->getWidth()  == 0)
+                                       && ($this->currShip->getHeight() == 0)
+                                       && ($this->currShip->getLength() == 0)
+                               )
+                       // The inserted part must be messured!
+                       ) && ($this->currPart->getWidth()  > 0)
+                         && ($this->currPart->getHeight() > 0)
+                         && ($this->currPart->getLength() > 0)
+               );
+       }
+
+       // Kontrolliert, ob die Abmasse Maschinenraum->Schiff stimmen
+       public function isNewSizeValid () {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] isNewSizeValid erreicht.<br />\n",
+                       $this->__toString()
+               ));
+               return (
+                       ( // Already defined ship messurings
+                                  ($this->newWidth  < $this->currShip->getWidth())
+                               && ($this->newHeight < $this->currShip->getDraught())
+                               && ($this->newLength < $this->currShip->getLength())
+                       ) || ( // Ship messurings shall be calculated
+                                  ($this->currShip->getWidth()  == 0)
+                               && ($this->currShip->getHeight() == 0)
+                               && ($this->currShip->getLength() == 0)
+                       )
+               );
+       }
+
+       // Masse extrahieren
+       public function extractDimensions ($dim) {
+               if (defined('DEBUG_CORE')) $this->getDebugInstance()->output(sprintf("[%s:] extractDimensions erreicht f&uuml;r <strong>%s</strong>.<br />\n",
+                       $this->__toString(),
+                       $this->getPartDescr()
+               ));
+
+               // Abmasse setzen
+               if ((isset($dim)) && (is_array($dim)) && (count($dim) == 3)) {
+                       // Abmasse aus Array holen
+                       $this->setWidth($dim[0]);
+                       $this->setHeight($dim[1]);
+                       $this->setLength($dim[2]);
+               } else {
+                       // Nicht gefundene Abmasse!
+                       throw new DimNotFoundInArrayException($this, self::EXCEPTION_DIMENSION_ARRAY_INVALID);
+               }
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/main/class_Merchant.php b/application/ship-simu/main/class_Merchant.php
new file mode 100644 (file)
index 0000000..1ef6dbd
--- /dev/null
@@ -0,0 +1,188 @@
+<?php
+
+// Die Haendler-Klasse
+class Merchant extends BaseFrameworkSystem {
+       // Name des Haendlers
+       private $merchantName   = "Namenloser H&auml;ndler";
+
+       // Preislite (Objekte wiedermal!)
+       private $priceList      = null;
+
+       // Zugewiesener Hafen
+       private $harborInstance = null;
+
+       // Konstruktor
+       private function __construct () {
+               // Eltern-Konstruktor aufrufen
+               parent::constructor(__CLASS__);
+
+               // Debug message
+               if (((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) {
+                       $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
+                               __CLASS__,
+                               __LINE__
+                       ));
+               }
+
+               // Beschreibung setzen
+               $this->setPartDescr("H&auml;ndler");
+
+               // Unique-ID erzeugen
+               $this->createUniqueID();
+
+               // Clean up a little
+               $this->removeSystemArray();
+       }
+
+       // Haendler mit Namen erzeugen
+       public static function createMerchant ($merchantName, Harbor $harborInstance) {
+               // String absichern
+               $merchantName = (string) $merchantName;
+
+               // Instanz holen
+               $merchantInstance = new Merchant();
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) {
+                       $merchantInstance->getDebugInstance()->output(sprintf("[%s:%d] Ein H&auml;ndler <strong>%s</strong> wird angelegt und soll sich am <strong>%s</strong> niederlassen.<br />\n",
+                               __CLASS__,
+                               __LINE__,
+                               $merchantName,
+                               $harborInstance->getHarborName()
+                       ));
+               }
+
+               // Haendlernamen setzen
+               $merchantInstance->setMerchantName($merchantName);
+
+               // In dem angegebenen Hafen den Haendler ansiedeln
+               $merchantInstance->setHarborInstance($harborInstance);
+
+               // Preisliste initialisieren
+               $merchantInstance->createPriceList();
+
+               // Instanz zurueckliefern
+               return $merchantInstance;
+       }
+
+       // Initialize pricing list
+       private function createPriceList () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> erh&auml;lt eine leere Preisliste.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName()
+               ));
+               $this->priceList = new FrameworkArrayObject();
+       }
+
+       // Setter for merchant name
+       public function setMerchantName ($merchantName) {
+               // Secure string
+               $merchantName = (string) $merchantName;
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndlername <strong>%s</strong> ist nun bekannt.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $merchantName
+               ));
+               $this->merchantName = $merchantName;
+       }
+
+       // Getter for merchant name
+       public function getMerchantName () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndlername <strong>%s</strong> wird verlangt.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->merchantName
+               ));
+               return $this->merchantName;
+       }
+
+       // Setter for harbor instance
+       public function setHarborInstance (Harbor $harborInstance) {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> l&auml;sst sich am <strong>%s</strong> nieder.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $harborInstance->getHarborName()
+               ));
+               $this->harborInstance = $harborInstance;
+       }
+
+       // Getter for harbor instance
+       public function getHarborInstance () {
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> hat sich am <strong>%s</strong> niedergelassen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $harborInstance->getHarborName()
+               ));
+               return $this->harborInstance;
+       }
+
+       // Add new item to merchant's price list
+       public function addItemToPriceList (ItemIsTradeable $itemInstance, $price) {
+               // Secure pricing
+               $price = (float) $price;
+
+               // Debug message
+               if ((defined('DEBUG_MERCHANT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Der H&auml;ndler <strong>%s</strong> kann nun das Schiffsteil <strong>%s</strong> &quot;<strong>%s</strong>&quot; zu <strong>%s</strong> verkaufen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->getMerchantName(),
+                       $itemInstance->__toString(),
+                       $itemInstance->getPartDescr(),
+                       $this->formatCurrency($price)
+               ));
+
+               // Construct pricing item and add it to the list
+               $this->priceList->append(array(
+                       'item'  => $itemInstance,
+                       'price' => $price
+               ));
+
+               // Remove price attribute
+               $itemInstance->removePrice();
+       }
+
+       // Get a price from the merchant's list
+       public function getPriceFromList (ItemIsTradeable $itemInstance) {
+               $price = 0;
+
+               // Iterate throw whole list
+               for ($iter = $this->priceList->getIterator(); $iter->valid(); $iter->next()) {
+                       // Get current item
+                       $item = $iter->current();
+
+                       // Does this item match? The unique ID may not work...
+                       if ($item['item']->itemMatches($itemInstance)) {
+                               // Extract price and stop searching
+                               $price = $item['price'];
+                               break;
+                       }
+               }
+
+               // Was the item found?
+               if ($price === 0) {
+                       // Throw exception
+                       throw new ItemNotInPriceListException($itemInstance, self::EXCEPTION_ITEM_NOT_IN_PRICE_LIST);
+               }
+
+               // Return price
+               return $price;
+       }
+
+       /**
+        * Stub!
+        */
+       public function saveObjectToDatabase () {
+               $this->getDebugInstance()->output(sprintf("[%s:] Stub <strong>%s</strong> erreicht.",
+                       $this->__toString(),
+                       __FUNCTION__
+               ));
+       }
+}
+
+// [EOF]
+?>
diff --git a/application/ship-simu/main/class_WorksContract.php b/application/ship-simu/main/class_WorksContract.php
new file mode 100644 (file)
index 0000000..961ef17
--- /dev/null
@@ -0,0 +1,444 @@
+<?php
+
+// Bauvertrag-Klasse
+class WorksContract extends BaseFrameworkSystem {
+       // Zukuenftiger Schiffsname
+       private $shipName         = "";
+
+       // Instanz zum Schiffstypen
+       private $shipInstance     = null;
+
+       // Contract partner
+       private $contractPartner  = null;
+
+       // Other contract partner
+       private $contractParty    = null;
+
+       // Is the contract signed?
+       private $signed           = false;
+
+       // Merchant instance
+       private $merchantInstance = null;
+
+       // Konstruktor
+       private function __construct () {
+               // Eltern-Konstruktor aufrufen
+               parent::constructor(__CLASS__);
+
+               // Debug message
+               if (((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) {
+                       $this->getDebugInstance()->output(sprintf("[%s:%d] Konstruktor erreicht.<br />\n",
+                               __CLASS__,
+                               __LINE__
+                       ));
+               }
+
+               // Beschreibung setzen
+               $this->setPartDescr("Bauvertrag");
+
+               // Unique-ID generieren
+               $this->createUniqueID();
+
+               // Clean up a little
+               $this->removeSystemArray();
+       }
+
+       // Neuen Bauvertrag generieren
+       public static function createWorksContract ($shipType, $shipName, ContractPartner $partnerInstance) {
+               // Strings absichern
+               $shipType = (string) $shipType;
+               $shipName = (string) $shipName;
+
+               // Is the other one a contract partner?
+               if (is_null($partnerInstance)) {
+                       // Opps! Empty partner instance?
+                       throw new NullPointerException($partnerInstance, self::EXCEPTION_IS_NULL_POINTER);
+               } elseif (!is_object($partnerInstance)) {
+                       // Not an object! ;-(
+                       throw new NoObjectException($partnerInstance, self::EXCEPTION_IS_NO_OBJECT);
+               } elseif (!method_exists($partnerInstance, 'isContractPartner')) {
+                       // Does not have the required feature (method)
+                       throw new MissingMethodException(array($partnerInstance, 'isContractPartner'), self::EXCEPTION_MISSING_METHOD);
+               }
+
+               // Instanz holen
+               $contractInstance = new WorksContract();
+
+               // Debug-Meldung ausgeben
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $contractInstance->getDebugInstance()->output(sprintf("[%s:%d] Neuer Bauvertrag wird f&uuml;r das Schiff <strong>%s</strong> mit der <strong>%s</strong> <strong>%s</strong> erstellt.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $shipName,
+                       $partnerInstance->getPartDescr(),
+                       $partnerInstance->getCompanyName()
+               ));
+
+               // Schiffsnamen setzen
+               $contractInstance->setShipName($shipName);
+
+               // Existiert die Klasse ueberhaupt?
+               if (!class_exists($shipType)) {
+                       // Klasse nicht gefunden
+                       throw new ClassNotFoundException ($shipType, 0);
+               }
+
+               // Schiff-Instanz temporaer erzeugen und in den Bauvertrag einfuegen
+               $eval = sprintf("\$contractInstance->setShipInstance(%s::create%s(\"%s\"));",
+                       $shipType,
+                       $shipType,
+                       $shipName
+               );
+
+               // Debug message
+               if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $contractInstance->getDebugInstance()->output(sprintf("[%s:%d] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       htmlentities($eval)
+               ));
+
+               // Execute constructed command
+               @eval($eval);
+
+               // Set itself as contract partner
+               $contractInstance->setContractPartner($partnerInstance);
+
+               // Instanz zurueckgeben
+               return $contractInstance;
+       }
+
+       // Setter for ship instance
+       private function setShipInstance (ConstructableShip $shipInstance) {
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiff <strong>%s</strong> wird in den Bauvertrag aufgenommen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $shipInstance->getShipName()
+               ));
+               $this->shipInstance = $shipInstance;
+       }
+
+       // Setter for ship name
+       private function setShipName ($shipName) {
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das neue Schiff wird <strong>%s</strong> heissen.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $shipName
+               ));
+               $this->shipName = (string) $shipName;
+       }
+
+       // Getter for ship name
+       public function getShipName () {
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Schiffsname <strong>%s</strong> angefordert.<br />\n",
+                       __CLASS__,
+                       __LINE__,
+                       $this->shipName
+               ));
+               return $this->shipName;
+       }
+
+       // Getter for ship instance
+       public function getShipInstance () {
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Schiff-Instanz angefordert.<br />\n",
+                       __CLASS__,
+                       __LINE__
+               ));
+               return $this->shipInstance;
+       }
+
+       // Add detail to the contract
+       public function addContractDetails ($shipPart, $parentPart, array $dataArray) {
+               // Secure strings
+               $shipPart   = (string) $shipPart;
+               $parentPart = (string) $parentPart;
+
+               // Debug message
+               if ((defined('DEBUG_CONTRACT')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:%d] Das Schiffsteil <strong>%s</strong> wird zusammen mit dem Konstruktionsteil <strong>%s</strong> in den Bauvertrag aufgenommen.<br />\n",
+   &nbs