SystemOrganization addCategory: #InstallBuilder! Object subclass: #IBAction instanceVariableNames: 'condition' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBAction methodsFor: 'visiting' stamp: 'lr 9/13/2007 15:49'! build: aFactory self subclassResponsibility! ! !IBAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 20:32'! condition "Define a precondition for this installation step." ^ condition! ! !IBAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 14:20'! condition: aString "Define a precondition for this installation step." condition := aString ! ! IBAction subclass: #IBMonticelloAction instanceVariableNames: 'name location' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBMonticelloAction methodsFor: 'visiting' stamp: 'lr 9/13/2007 15:50'! build: aFactory aFactory buildMonticello: self! ! !IBMonticelloAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 16:05'! location ^ location! ! !IBMonticelloAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 16:05'! location: aString "Define the http repository to be used." location := aString ! ! !IBMonticelloAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 16:00'! name ^ name! ! !IBMonticelloAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 16:00'! name: aString "Define the package name to be used." name := aString! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:11'! package ^ MCPackage new name: self name! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:16'! repository ^ self repositoryGroup repositories detect: [ :each | each isKindOf: MCHttpRepository ] ifNone: [ nil ]! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:16'! repositoryGroup ^ self workingCopy repositoryGroup! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/20/2007 13:11'! url ^ self repository locationWithTrailingSlash , self versionInfo name , '.mcz'! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:40'! version ^ self repositoryGroup versionWithInfo: self versionInfo ifNone: [ MCCacheRepository default versionWithInfo: self versionInfo ifAbsent: [ MCRepositoryGroup default versionWithInfo: self versionInfo ] ]! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:12'! versionInfo ^ self workingCopy currentVersionInfo! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/20/2007 13:15'! versionNumber ^ (self versionInfo name copyAfterLast: $.) asInteger! ! !IBMonticelloAction methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 16:11'! workingCopy ^ MCWorkingCopy forPackage: self package! ! IBAction subclass: #IBRepositoryAction instanceVariableNames: 'location' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBRepositoryAction methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:40'! build: aFactory aFactory buildRepository: self! ! !IBRepositoryAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 20:40'! location ^ location! ! !IBRepositoryAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 20:40'! location: aString location := aString! ! IBAction subclass: #IBSqueakMapAction instanceVariableNames: 'name' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBSqueakMapAction methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:27'! build: aFactory aFactory buildSqueakMap: self! ! !IBSqueakMapAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 20:27'! name ^ name! ! !IBSqueakMapAction methodsFor: 'accessing' stamp: 'lr 9/13/2007 20:28'! name: aString name := aString! ! IBAction subclass: #IBUniverseAction instanceVariableNames: 'name location package' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBUniverseAction methodsFor: 'visiting' stamp: 'lr 9/23/2007 10:33'! build: aFactory aFactory buildUniverse: self! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:52'! location ^ location! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:52'! location: aString "Define the http repository to be used." location := aString ! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 8/24/2008 16:03'! locationWithTrailingSlash ^ (location last = $/) ifTrue: [ location ] ifFalse: [ location , '/' ]! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:52'! name ^ name! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:52'! name: aString "Define the package name to be used." name := aString! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 11:24'! package ^ package! ! !IBUniverseAction methodsFor: 'accessing' stamp: 'lr 9/23/2007 11:24'! package: aPackage package := aPackage! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 10:52'! repository ^ self repositoryGroup repositories detect: [ :each | each isKindOf: MCHttpRepository ] ifNone: [ nil ]! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 10:52'! repositoryGroup ^ self workingCopy repositoryGroup! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 8/24/2008 16:02'! url ^ self locationWithTrailingSlash , self versionInfo name , '.mcz'! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 10:52'! version ^ self repositoryGroup versionWithInfo: self versionInfo ifNone: [ MCCacheRepository default versionWithInfo: self versionInfo ifAbsent: [ MCRepositoryGroup default versionWithInfo: self versionInfo ] ]! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 10:52'! versionInfo ^ self workingCopy currentVersionInfo! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 10:52'! versionNumber ^ (self versionInfo name copyAfterLast: $.) asInteger! ! !IBUniverseAction methodsFor: 'accessing-monticello' stamp: 'lr 9/23/2007 11:22'! workingCopy ^ MCWorkingCopy forPackage: (MCPackage new name: self name)! ! Object subclass: #IBInstallBuilder instanceVariableNames: 'name actions version comment' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBInstallBuilder class methodsFor: 'accessing' stamp: 'lr 5/14/2008 07:22'! magritte ^ self new name: 'Magritte'; version: self version; add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/magritte'; yourself); add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/magritteaddons'; yourself); add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/tutorial'; yourself); yourself! ! !IBInstallBuilder class methodsFor: 'instance-creation' stamp: 'lr 9/23/2007 10:42'! new self name = #IBFactory ifTrue: [ self error: self name , ' is abstract.' ]. ^ super new! ! !IBInstallBuilder class methodsFor: 'accessing' stamp: 'lr 5/14/2008 07:22'! pier ^ self new name: 'Pier'; version: self version; add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/pier'; yourself); add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/pieraddons'; yourself); add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/audioscrobbler'; yourself); add: (IBRepositoryAction new location: 'http://source.lukas-renggli.ch/topfeeder'; yourself); yourself! ! !IBInstallBuilder class methodsFor: 'accessing' stamp: 'lr 5/14/2008 07:22'! pierSecurity ^ self new name: 'pierunixsecurity'; version: self version; yourself! ! !IBInstallBuilder class methodsFor: 'accessing' stamp: 'lr 8/24/2008 10:50'! seaside ^ self new name: 'Seaside'; version: '2.8.3'; add: (IBRepositoryAction new location: 'http://www.squeaksource.com/KomHttpServer'; yourself); add: (IBRepositoryAction new location: 'http://www.squeaksource.com/Seaside'; yourself); add: (IBRepositoryAction new location: 'http://www.squeaksource.com/rsrss'; yourself); yourself! ! !IBInstallBuilder class methodsFor: 'configuration' stamp: 'lr 9/29/2008 18:14'! version ^ '1.0.17'! ! !IBInstallBuilder methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 17:11'! actions ^ actions ifNil: [ actions := OrderedCollection new ]! ! !IBInstallBuilder methodsFor: 'adding' stamp: 'lr 9/13/2007 16:30'! add: anAction self actions add: anAction! ! !IBInstallBuilder methodsFor: 'adding' stamp: 'lr 9/13/2007 20:25'! addAll: aCollection self actions addAll: aCollection! ! !IBInstallBuilder methodsFor: 'actions' stamp: 'lr 9/13/2007 16:47'! build "Builds the receiving entity using a double-dispatch trough the actions. Can be changed with pre- and post-conditions in subclasses." self actions do: [ :each | each build: self ] displayingProgress: 'Building ' , self printString! ! !IBInstallBuilder methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:40'! buildMonticello: anAction! ! !IBInstallBuilder methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:41'! buildRepository: anAction! ! !IBInstallBuilder methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:41'! buildSqueakMap: anAction! ! !IBInstallBuilder methodsFor: 'visiting' stamp: 'lr 9/23/2007 10:34'! buildUniverse: anAction! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 21:27'! comment ^ comment ifNil: [ comment := String new ]! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 17:14'! comment: aString ^ comment ifNil: [ comment := String new ]! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 17:10'! name ^ name! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 17:10'! name: aString ^ name := aString! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 17:11'! version ^ version! ! !IBInstallBuilder methodsFor: 'accessing' stamp: 'lr 9/13/2007 17:10'! version: aString version := aString! ! IBInstallBuilder subclass: #IBPackageUniverse instanceVariableNames: 'client' classVariableNames: 'PackageUniversePassword PackageUniverseUsername' poolDictionaries: '' category: 'InstallBuilder'! !IBPackageUniverse class methodsFor: 'examples' stamp: 'lr 3/11/2008 09:48'! magritte "self magritte build" ^ super magritte add: (IBUniverseAction new name: 'Magritte-Model'; location: 'http://source.lukas-renggli.ch/magritte'; package: (UPackage new name: 'Magritte-Model'; categoryString: 'Development'; homepage: 'http://www.lukas-renggli.ch/smalltalk/magritte' asUrl; maintainer: 'Lukas Renggli '; description: 'Most applications consist of a big number of model- or so called domain-objects. Building different views, editors, and reports; querying, validating and storing those objects is very repetitive and error-prone, if an object changes its shape frequently. Magritte is a fully dynamic meta-description framework that helps to solve those problems, while keeping the full power to the programmer in all aspects. Moreover since Magritte is described in itself, you can let your users modify the meta-world and add their own fields and forms without writing a single line of code.'; yourself); yourself); add: (IBUniverseAction new name: 'Magritte-Tests'; location: 'http://source.lukas-renggli.ch/magritte'; package: (UPackage new name: 'Magritte-Tests'; depends: #('Magritte-Model'); categoryString: 'Development'; homepage: 'http://www.lukas-renggli.ch/smalltalk/magritte' asUrl; maintainer: 'Lukas Renggli '; description: 'Magritte SUnit tests.'; yourself); yourself); add: (IBUniverseAction new name: 'Magritte-Morph'; location: 'http://source.lukas-renggli.ch/magritte'; package: (UPackage new name: 'Magritte-Morph'; categoryString: 'Morphs'; depends: #('Magritte-Model'); homepage: 'http://www.lukas-renggli.ch/smalltalk/magritte' asUrl; maintainer: 'Lukas Renggli '; description: 'Magritte bindings for Morphic.'; yourself); yourself); add: (IBUniverseAction new name: 'Magritte-Seaside'; location: 'http://source.lukas-renggli.ch/magritte'; package: (UPackage new name: 'Magritte-Seaside'; categoryString: 'Web Development'; depends: #('Seaside' 'Scriptaculous' 'Magritte-Model'); homepage: 'http://www.lukas-renggli.ch/smalltalk/magritte' asUrl; maintainer: 'Lukas Renggli '; description: 'Magritte bindings for Seaside.'; yourself); yourself); add: (IBUniverseAction new name: 'Mse'; location: 'http://source.lukas-renggli.ch/mse'; package: (UPackage new name: 'Mse'; categoryString: 'Development'; homepage: 'http://smallwiki.unibe.ch/fame/mse' asUrl; maintainer: 'Lukas Renggli '; description: 'MSE file format to exchange data of meta-metamodels, metamodels and models.'; yourself); yourself); add: (IBUniverseAction new name: 'Magritte-Mse'; location: 'http://source.lukas-renggli.ch/mse'; package: (UPackage new name: 'Magritte-Mse'; categoryString: 'Development'; depends: #('Magritte-Model' 'Mse'); homepage: 'http://smallwiki.unibe.ch/fame/mse/' asUrl; maintainer: 'Lukas Renggli '; description: 'MSE file format integration to Magritte.'; yourself); yourself); yourself! ! !IBPackageUniverse class methodsFor: 'examples' stamp: 'lr 9/29/2008 19:01'! pier "self pier build" ^ super pier add: (IBUniverseAction new name: 'Pier-Model'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Model'; depends: #('Magritte-Model'); categoryString: 'Development'; homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier is a powerful and extensible implementation of a meta-described content management and Wiki system, written with objects from top to bottom: (1) Object-Oriented Design: Pier features a fully object oriented and meta-described domain model. As an example, the content of the pages is parsed and stored as a tree of different entities representing text, links, tables, lists, etc. (2) Extensibility: Everything in Pier can be extended: page types, storage mechanism, actions, security mechanism, web-server, etc. Plug-ins can be shared within the community and loaded independently of each other into the system. (3) Open Source: Pier is released under the MIT license which grants unrestricted rights to copy, modify, and redistribute as long as the original copyright and license terms are retained. (4) Test Suites: Pier is heavily tested. There are more than 1200 unit tests included with the core of Pier. This makes it easy to change and verify the code and comes in extremely useful when porting Pier to other Smalltalk dialects or when writing extensions.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Tests'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Tests'; depends: #('Pier-Model' 'Magritte-Tests'); categoryString: 'Development'; homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier SUnit tests.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Seaside'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Seaside'; categoryString: 'Web Development'; depends: #('Seaside' 'Scriptaculous' 'Magritte-Seaside' 'Pier-Model'); homepage: 'http://www.piercms.com/' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier bindings for Seaside.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-OmniBrowser'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-OmniBrowser'; categoryString: 'Development'; depends: #('OmniBrowser-Full' 'Magritte-Morph' 'Pier-Model'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier bindings for OmniBrowser.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Squeak-Persistency'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Squeak-Persistency'; categoryString: 'Development'; depends: #('Pier-Model' 'Pier-Tests'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier persistency mechanisms for Squeak.'; yourself); yourself); " extensions " add: (IBUniverseAction new name: 'Pier-Security'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Security'; categoryString: 'Web Development'; depends: #('Pier-Seaside' 'Pier-Tests'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier Unix security plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Blog'; location: 'http://source.lukas-renggli.ch/pier'; package: (UPackage new name: 'Pier-Blog'; categoryString: 'Web Development'; depends: #('RSRSS2' 'Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier blog plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-EditorEnh'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-EditorEnh'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier editor enhancement plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Documents'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Documents'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Provide additional documents on a praticular structure, for example to add a side-bar. Custom documents can inherit from the parent and/or provide a default document.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-LightBox'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-LightBox'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier lightbox plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Randomizer'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Randomizer'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier randomizer plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Design'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Design'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Enabled design editing tools in the context of the applied page.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Google'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Google'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Integration of Google services into Pier.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-TagCloud'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-TagCloud'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier tag cloud plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Math'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Math'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier LaTeX math mode plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'ShoutPier'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Shout'; categoryString: 'Web Development'; depends: #('Shout' 'Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier Smalltalk syntax highlighting plugin.'; yourself); yourself); add: (IBUniverseAction new name: 'Sitemap'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Sitemap'; categoryString: 'Web Development'; depends: #('Pier-Seaside' 'YAXO'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Creates a Google and Yahoo Sitemap definitions.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Media'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Media'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Lukas Renggli '; description: 'Pier links for YouTube, Vimeo and SlideShare'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Titles'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Titles'; categoryString: 'Web Development'; depends: #('Pier-Seaside'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Tudor Girba '; description: 'A set of widgets to control the title of a page.'; yourself); yourself); add: (IBUniverseAction new name: 'Pier-Setup'; location: 'http://source.lukas-renggli.ch/pieraddons'; package: (UPackage new name: 'Pier-Setup'; categoryString: 'Web Development'; depends: #('Pier-Security' 'Pier-Blog' 'Pier-Google' 'Pier-EditorEnh' 'Pier-Design' 'Pier-Documents' 'Pier-Shout' 'Pier-TagCloud' 'Pier-Media' 'Pier-Randomizer' 'Pier-Titles' 'Pier-Sitemap'); homepage: 'http://www.piercms.com' asUrl; maintainer: 'Tudor Girba '; description: 'Metapackage that loads a common collection of Pier plugins, and a helper class to instantiate the one-click experience.'; yourself); yourself); yourself! ! !IBPackageUniverse class methodsFor: 'examples' stamp: 'lr 10/28/2007 15:05'! seaside "self seaside build" ^ super seaside add: (IBUniverseAction new name: 'Seaside2'; location: 'http://www.squeaksource.com/Seaside'; package: (UPackage new name: 'Seaside'; depends: #('KomHttpServer'); categoryString: 'Web Development'; homepage: 'http://www.seaside.st' asUrl; maintainer: 'Lukas Renggli '; description: 'A framework for building sophisticated web applications in Squeak. Develop for the web using reusable, embeddable components and unique call/return semantics for moving between pages.'; yourself); yourself); add: (IBUniverseAction new name: 'Scriptaculous'; location: 'http://www.squeaksource.com/Seaside'; package: (UPackage new name: 'Scriptaculous'; depends: #('Seaside'); categoryString: 'Web Development'; homepage: 'http://scriptaculous.seasidehosting.st' asUrl; maintainer: 'Lukas Renggli '; description: 'High-level Javascript bindings for the Seaside web application framework. This package includes PrototypeJS (http://www.prototypejs.org) and script.aculo.us (http://script.aculo.us).'; yourself); yourself); add: (IBUniverseAction new name: 'Comet'; location: 'http://www.squeaksource.com/Seaside'; package: (UPackage new name: 'Comet'; depends: #('Scriptaculous'); categoryString: 'Web Development'; maintainer: 'Lukas Renggli '; description: 'High-level Comet bindings for the Seaside web application framework.'; yourself); yourself); add: (IBUniverseAction new name: 'RSRSS2'; location: 'http://www.squeaksource.com/rsrss'; package: (UPackage new name: 'RSRSS2'; depends: #('Seaside'); categoryString: 'Web Development'; maintainer: 'Lukas Renggli '; description: 'RSS 2.0 feed creation with Seaside canvas API.'; yourself); yourself); yourself! ! !IBPackageUniverse methodsFor: 'visiting' stamp: 'lr 8/24/2008 13:27'! buildUniverse: anAction | package | package := anAction package. package version: (UVersion readFromString: self version , '.' , anAction versionNumber asString); url: anAction url asUrl. self client sendMessage: (UMAddPackage username: self username password: self password package: package)! ! !IBPackageUniverse methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:18'! client ^ client ifNil: [ client := UUniverseClient forUniverse: self universe ]! ! !IBPackageUniverse methodsFor: 'initialization' stamp: 'lr 9/20/2007 13:03'! initialize super initialize. self universe updatePackagesViaWWW! ! !IBPackageUniverse methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:20'! password ^ PackageUniversePassword ifNil: [ PackageUniversePassword := FillInTheBlankMorph request: 'Password:' initialAnswer: '' ]! ! !IBPackageUniverse methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:03'! universe ^ UUniverse systemUniverse! ! !IBPackageUniverse methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:20'! username ^ PackageUniverseUsername ifNil: [ PackageUniverseUsername := FillInTheBlankMorph request: 'Username:' initialAnswer: 'lr' ]! ! IBInstallBuilder subclass: #IBSqueakMap instanceVariableNames: 'zip script package url' classVariableNames: 'SqueakMapPassword SqueakMapUsername' poolDictionaries: '' category: 'InstallBuilder'! !IBSqueakMap class methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:43'! magritte "self magritte build; dump; publish" ^ super magritte add: (IBSqueakMapAction new name: 'Seaside'; yourself); add: (IBMonticelloAction new name: 'Magritte-Model'; location: 'http://source.lukas-renggli.ch/magritte'; yourself); add: (IBMonticelloAction new name: 'Magritte-Tests'; condition: 'Smalltalk includesKey: #TestCase'; location: 'http://source.lukas-renggli.ch/magritte'; yourself); add: (IBMonticelloAction new name: 'Magritte-Morph'; condition: 'Smalltalk includesKey: #Morph'; location: 'http://source.lukas-renggli.ch/magritte'; yourself); add: (IBMonticelloAction new name: 'Magritte-Seaside'; condition: 'Smalltalk includesKey: #WAComponent'; location: 'http://source.lukas-renggli.ch/magritte'; yourself); yourself! ! !IBSqueakMap class methodsFor: 'accessing' stamp: 'lr 5/14/2008 07:30'! pier "self pier build; dump; publish" ^ super pier add: (IBSqueakMapAction new name: 'Magritte'; yourself); add: (IBMonticelloAction new name: 'Pier-Model'; location: 'http://source.lukas-renggli.ch/pier'; yourself); add: (IBMonticelloAction new name: 'Pier-Tests'; condition: 'Smalltalk includesKey: #TestCase'; location: 'http://source.lukas-renggli.ch/pier'; yourself); add: (IBMonticelloAction new name: 'Pier-Seaside'; condition: 'Smalltalk includesKey: #WAComponent'; location: 'http://source.lukas-renggli.ch/pier'; yourself); add: (IBMonticelloAction new name: 'Pier-OmniBrowser'; condition: 'Smalltalk includesKey: #OBCommand'; location: 'http://source.lukas-renggli.ch/pier'; yourself); add: (IBMonticelloAction new name: 'Pier-Squeak-Persistency'; location: 'http://source.lukas-renggli.ch/pier'; yourself); yourself! ! !IBSqueakMap class methodsFor: 'accessing' stamp: 'lr 9/23/2007 10:44'! pierSecurity "self pierSecurity build; dump; publish" ^ super pierSecurity add: (IBSqueakMapAction new name: 'Pier'; yourself); add: (IBMonticelloAction new name: 'Pier-Security'; location: 'http://source.lukas-renggli.ch/pier'; yourself); yourself! ! !IBSqueakMap class methodsFor: 'accessing' stamp: 'lr 10/28/2007 14:35'! seaside "self seaside build; dump; publish" ^ super seaside add: (IBMonticelloAction new condition: 'PasteUpMorph confirm: ''Would you like to install the Kom server?'''; name: 'DynamicBindings'; yourself); add: (IBMonticelloAction new condition: 'Smalltalk includesKey: #DynamicBindings'; name: 'KomServices'; yourself); add: (IBMonticelloAction new condition: 'Smalltalk includesKey: #TcpService'; name: 'KomHttpServer'; yourself); add: (IBMonticelloAction new location: 'http://www.squeaksource.com/Seaside'; name: 'Seaside2'; yourself); add: (IBMonticelloAction new condition: 'PasteUpMorph confirm: ''Would you like to install Scriptaculous?'''; location: 'http://www.squeaksource.com/Seaside'; name: 'Scriptaculous'; yourself); add: (IBMonticelloAction new condition: '(Smalltalk includesKey: #DynamicBindings) and: [ PasteUpMorph confirm: ''Would you like to install Comet?'' ]'; location: 'http://www.squeaksource.com/Seaside'; name: 'Comet'; yourself); add: (IBMonticelloAction new condition: 'PasteUpMorph confirm: ''Would you like to install RSS support?'''; location: 'http://www.squeaksource.com/rsrss'; name: 'RSRSS2'; yourself); yourself! ! !IBSqueakMap methodsFor: 'actions' stamp: 'lr 9/13/2007 16:49'! build zip := ZipArchive new. script := String new writeStream. super build. (zip addString: script contents as: 'install/preamble') desiredCompressionLevel: 9! ! !IBSqueakMap methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:42'! buildMonticello: anAction | snapshot | snapshot := anAction version. zip addString: (ByteArray streamContents: [ :stream | snapshot fileOutOn: stream. ]) as: snapshot fileName. self conditional: anAction do: [ script nextPutAll: 'self fileInMonticelloZipVersionNamed: '. script print: snapshot fileName. anAction location isNil ifFalse: [ script nextPutAll: '. (MCWorkingCopy forPackage: (MCPackage new name: '. script print: anAction name. script nextPutAll: '))'. script nextPutAll: ' repositoryGroup addRepository: ('. script nextPutAll: (MCHttpRepository creationTemplateLocation: anAction location user: '' password: ''). script nextPut: $) ] ]! ! !IBSqueakMap methodsFor: 'visiting' stamp: 'lr 9/13/2007 21:32'! buildRepository: anAction self conditional: anAction do: [ script nextPutAll: 'MCRepositoryGroup default addRepository: ('. script nextPutAll: (MCHttpRepository creationTemplateLocation: anAction location user: '' password: ''). script nextPut: $) ]! ! !IBSqueakMap methodsFor: 'visiting' stamp: 'lr 9/13/2007 20:34'! buildSqueakMap: anAction self conditional: anAction do: [ script nextPutAll: '(SMSqueakMap default packageWithName: '. script print: anAction name. script nextPutAll: ') lastRelease install' ]! ! !IBSqueakMap methodsFor: 'private' stamp: 'lr 9/13/2007 15:33'! checkResult: aString | result | result := #( 'HTTP/1.1 201 ' 'HTTP/1.1 200 ' 'HTTP/1.0 201 ' 'HTTP/1.0 200 ') anySatisfy: [ :each | aString beginsWith: each ]. result ifFalse: [ self error: aString ]! ! !IBSqueakMap methodsFor: 'private' stamp: 'lr 9/13/2007 20:45'! conditional: anAction do: aBlock anAction condition isNil ifFalse: [ script nextPut: $(; nextPutAll: anAction condition; nextPutAll: ') ifTrue: [' ]. aBlock value. anAction condition isNil ifFalse: [ script nextPut: $] ]. script nextPut: $.; cr! ! !IBSqueakMap methodsFor: 'actions' stamp: 'lr 9/13/2007 20:14'! dump "Dump the SAR archive to the file-system." zip writeToFileNamed: self fileName! ! !IBSqueakMap methodsFor: 'accessing-dynamic' stamp: 'lr 9/13/2007 17:15'! fileName ^ self name asLowercase , '-' , self version asLowercase , '.sar'! ! !IBSqueakMap methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:21'! password ^ SqueakMapPassword ifNil: [ SqueakMapPassword := FillInTheBlankMorph request: 'Password:' initialAnswer: '' ]! ! !IBSqueakMap methodsFor: 'actions' stamp: 'lr 9/17/2007 14:45'! publish "Publish the package as a new release on SqueakMap." | result | result := HTTPSocket httpPost: self squeakMapUrl , 'packagebyname/' , self name , '/newrelease' args: (Array with: 'note' -> (Array with: self comment) with: 'version' -> (Array with: self version) with: 'downloadURL' -> (Array with: self upload)) user: self username passwd: self password. (result contents includesSubString: self version) ifFalse: [ self error: result contents ]! ! !IBSqueakMap methodsFor: 'private' stamp: 'lr 9/13/2007 15:33'! squeakMapUrl ^ 'http://map1.squeakfoundation.org/sm/'! ! !IBSqueakMap methodsFor: 'actions' stamp: 'lr 9/17/2007 14:43'! upload | result stream | url isNil ifFalse: [ ^ url ]. result := HTTPSocket httpPut: (ByteArray streamContents: [ :s | zip writeTo: s ]) to: self squeakMapUrl , 'upload/' , self fileName user: self username passwd: self password. self checkResult: result. stream := result readStream. stream upToAll: 'http://'. ^ url := 'http://' , stream upToEnd! ! !IBSqueakMap methodsFor: 'accessing' stamp: 'lr 9/20/2007 13:21'! username ^ SqueakMapUsername ifNil: [ SqueakMapUsername := FillInTheBlankMorph request: 'Username:' initialAnswer: 'lr' ]! ! Object subclass: #IBUtility instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'InstallBuilder'! !IBUtility class methodsFor: 'utilities' stamp: 'lr 10/28/2007 14:38'! cleanCategories: aPackage aPackage classesAndMetaClasses do: [ :each | each organization removeEmptyCategories; sortCategories ]! ! !IBUtility class methodsFor: 'utilities' stamp: 'lr 10/28/2007 14:38'! cleanSource: aPackage | input output line | aPackage methods do: [ :each | input := each sourceCode asString withBlanksTrimmed readStream. output := String streamContents: [ :stream | line := input nextLine. stream nextPutAll: (line copyFrom: 1 to: (line findLast: [ :c | c isSeparator not and: [ c ~= $. ] ])). stream nextPut: Character cr. [ input atEnd ] whileFalse: [ line := input nextLine. stream nextPutAll: (line copyFrom: 1 to: (line findLast: [ :c | c isSeparator not ])). stream nextPut: Character cr ] ]. output := output allButLast. (output last = $. and: [ (output at: output size - 1) ~= $$ ]) ifTrue: [ output := output allButLast ]. each sourceCode ~= output ifTrue: [ each actualClass compile: output ] ]! ! !IBUtility class methodsFor: 'utilities' stamp: 'lr 8/24/2008 10:53'! cleanUnderscore: aPackage FixUnderscores fixPackage: aPackage! !