"{ Package: 'stx:goodies/cypress' }"
CypressModel subclass:#CypressPackage
instanceVariableNames:'definition comment classes extensions'
classVariableNames:''
poolDictionaries:''
category:'Cypress-New-Model'
!
!CypressPackage class methodsFor:'instance creation'!
fromDirectory: directory
"Reads a CypressPackage from given directory"
^self new initializeFromDirectory: directory
"Created: / 13-09-2012 / 15:34:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
fromPackage: packageId
"Creates new CypressPackage for given package id"
^self fromPackageDefinition: (ProjectDefinition definitionClassForPackage: packageId createIfAbsent: true).
"Created: / 10-09-2012 / 23:34:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
fromPackageDefinition: projectDefinition
^self new initializeFromPackageDefinition: projectDefinition
"Created: / 10-09-2012 / 23:34:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!CypressPackage methodsFor:'accessing'!
classes
classes isNil ifTrue:[
classes := definition classes collect:[:cls|
CypressClass fromClass: cls.
]
].
^classes
"Created: / 10-09-2012 / 23:45:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
comment
^ comment
!
comment:something
comment := something.
!
definition
^ definition
!
extensions
extensions isNil ifTrue:[
extensions := definition extensions collect:[:mthd|
CypressMethod fromMethod: mthd
]
].
^extensions
"Created: / 11-09-2012 / 11:03:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!CypressPackage methodsFor:'initialization'!
initializeFromDirectory: directory
self readFrom: directory
"Created: / 13-09-2012 / 15:35:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
initializeFromPackageDefinition: projectDefinition
definition := projectDefinition.
name := projectDefinition package asString.
properties := Dictionary new.
properties
at: '_cypress_copyright' put: (definition legalCopyright);
at: '_stx_name' put: name.
"Created: / 10-09-2012 / 23:35:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!CypressPackage methodsFor:'reading & writing'!
writeTo: directory
| notice |
notice := definition legalCopyright.
(self properties includesKey:'licenseFile') ifTrue:[
notice := notice , ' (for license, see file ' , (self properties at:'licenseFile') , ')'.
].
self writeTo: directory asFilename notice: notice.
"Created: / 11-09-2012 / 11:45:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!CypressPackage methodsFor:'reading & writing - private'!
writeClassesTo: directory notice:copyrightNotice
"Writes my classes into 'directory' with given copyrightNotice"
| obsolete |
" collect possibly obsolete .class directories "
obsolete := Set new.
directory directoryContentsAsFilenamesDo:[:each|
| suffix |
each suffix = 'class' ifTrue:[
obsolete add: each.
]
].
" write classes... "
self classes do:[:cpsCls|
| cpsClsDir |
cpsClsDir := directory / ((cpsCls name copyReplaceAll: $: with: $_) , '.class').
obsolete remove: cpsClsDir ifAbsent:[].
cpsCls writeTo: cpsClsDir notice:copyrightNotice
].
" wipe out obsolete .class directories "
obsolete do:[:each|
each recursiveRemove.
].
"Created: / 11-09-2012 / 11:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
writeExtensionsTo: directory notice:copyrightNotice
"Writes extensions into 'directory'/file with given copyrightNotice"
| obsolete extensionsPerClass |
" group extensions by class... "
extensionsPerClass := Dictionary new.
self extensions do:[:cpsMthd |
(extensionsPerClass at: cpsMthd klass ifAbsentPut: [ Set new ])
add: cpsMthd.
].
" collect possibly obsolete .extension directories "
obsolete := Set new.
directory directoryContentsAsFilenamesDo:[:each|
| suffix |
each suffix = 'extension' ifTrue:[
obsolete add: each.
]
].
" write individual extensions... "
extensionsPerClass keysAndValuesDo:[:name :cpsMthds |
| cpsClsDir cpsCls |
cpsClsDir := directory / ((name copyReplaceAll: $: with: $_) , '.extension').
obsolete remove: cpsClsDir ifAbsent:[].
cpsClsDir exists ifFalse: [ cpsClsDir makeDirectory ].
" Here we create fake CypressClass with only extension methods - this
way I can reuse logic allready coded in CypressClass. "
cpsCls := CypressClass new.
cpsCls new initializeWithMethods: cpsMthds.
cpsCls writeMethodsTo: cpsClsDir notice:copyrightNotice.
].
" wipe out obsolete .class directories "
obsolete do:[:each|
each recursiveRemove.
].
"Created: / 11-09-2012 / 11:12:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!CypressPackage class methodsFor:'documentation'!
version_SVN
^ '$Id:: $'
! !