<!-- IFT3051 - Abdeljabar Hammondan / Nicola Grenon / Rafik Ouanouki --> 
<designPatterns>
    <program type="Java">
	<name>GanttProject v1.10.2</name>	
        
        <!-- Singleton -->		
		<designPattern name="Singleton">
			<microArchitectures>
	    		<microArchitecture number="213">
	      			<actors>
	        			<singleton roleKind="Class">
							<entity>net.sourceforge.ganttproject.gui.GanttLookAndFeels</entity>
                        </singleton>
                    </actors>
                	<comment>Always pleasure to detect the design patterns singleton</comment>
                </microArchitecture>
                <microArchitecture number="214">
				    <roles>
					    <singletons>
						    <singleton roleKind="Class"><entity>net.sourceforge.ganttproject.language.GanttLanguage</entity></singleton>
					    </singletons>
				    </roles>
			    </microArchitecture>
			    <comment>Il y a une methode static getInstance qui verifie si la class GanttLanguage est instancie, si NULL; elle instancie la class, autrement elle ne le fait pas.</comment>
            </microArchitectures>
	    </designPattern>
        
        <!-- Factory Method -->
	    <designPattern name="Factory Method">
			<microArchitectures>
	    		<microArchitecture number="223">
	      			<actors>
	        			<creator roleKind="AbstractClass">
							<entity>net.sourceforge.ganttproject.export.ProjectExportProcessor</entity>
                        </creator>
                        <concreteCreator roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.export.PDFExportProcessor</entity>
                        </concreteCreator>
                        <concreteProduct roleKind="Class">
                        	<entity>Object.File</entity>
                        </concreteProduct>
                        <client roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.GanttProject</entity>
                        </client>
                    </actors>
                	<comment>L'acteur abstract Product est l'objet OBJECT de java,a part ca, il est tres similaire a 
                			 a l'architecture décrite par le GoF(Concorde aussi point de vue code avec Les design Pattern Example)
                			 ,une version explicative qu'on a modifier pour donnees plusieurs ConcreteProduct afin d'illustrer 
                			 bien le concepte.
                	</comment>
            	</microArchitecture>
            	<microArchitecture number="224">
	      			<actors>
	        			<creator roleKind="Class">
							<entity>net.sourceforge.ganttproject.document.DocumentCreator</entity>
                        </creator>
                        <concreteCreator roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.document.DocumentCreator</entity>
                        </concreteCreator>
                        <concreteProduct roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.document.FileDocument</entity>
                        </concreteProduct>
                        <concreteProduct roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.document.HttpDocument</entity>
                        </concreteProduct>
                        <product roleKind="Interface">
                        	<entity>net.sourceforge.ganttproject.document.Document</entity>	
                        </product>
                        <client roleKind="Class">
                        	<entity>net.sourceforge.ganttproject.GanttProject</entity>
                        </client>
                    </actors>
                	<comment> Ici,nous avons une architecture assez similaire à celle décrite par le GoF, à l’exception près que
							  le Product est une Interface au lieu de AbstractClass, On remarquera aussi qu'il y a
							  deux concreteProduct.(Concorde aussi point de vue code avec Les design Pattern Example)
                	</comment>
            	</microArchitecture>
            </microArchitectures>
	    </designPattern>
        
        <!-- Facade -->
        <designPattern name="Facade">
 		    <microArchitectures>
 			    <microArchitecture number="199">
 				    <roles>
 					    <facades>
 						    <facade roleKind="AbstractClass">
  							    <entity>net.sourceforge.ganttproject.task.TaskManager</entity> 
  						    </facade>
  					    </facades>
  					    <facades>
 						    <facade roleKind="Class">
  							    <entity>net.sourceforge.ganttproject.task.TaskManagerImpl</entity> 
  						    </facade>
  					    </facades>
  					    <subsystemClasses>
 						    <subsystemClass roleKind="AbstractClass">
  							    <entity>net.sourceforge.ganttproject.GanttTree</entity> 
  						    </subsystemClass>
						    <subsystemClass roleKind="Class">
  							    <entity>net.sourceforge.ganttproject.GanttGraphiqueArea</entity> 
  						    </subsystemClass>
 						    <subsystemClass roleKind="AbstractClass">
    						    <entity>net.sourceforge.ganttproject.gui.taskproperties.TaskDependanciesPanel</entity> 
  	    					</subsystemClass>
 		    				<subsystemClass roleKind="Class">
  			    				<entity>net.sourceforge.ganttproject.GanttProject</entity> 
  				    		</subsystemClass>
 				        </subsystemClasses>
  				    </roles>
  				    <comment>
                            L'interface TaskManager et sont implentation joue le role de FACADE, en effet le sous-systeme composer 
                            des class comme GanttProject, TaskDependenciesPanel, GanttGraphicArea et GanttTree doivent passer par 
                            cette interface pour acceder a d'autres class tel que les class Heriter par la class 
                            Algorithme(AdjustTaskBoundsAlgorithm, RecalculateScheduleAlgorithme etc), il joue en quelques sorte 
                            le role d'intermediaire inevitable.
                    </comment> 
  			    </microArchitecture>
  		    </microArchitectures>
 	    </designPattern>
        
        <!-- Adapter -->
        <designPattern name="Adapter">
 		    <microArchitectures>
 			    <microArchitecture number="230">
 				    <roles>
 					    <adapter>
 						    <adapter roleKind="AbstractClass">
  							    <entity>net.sourceforge.ganttproject.task.event.TaskListenerAdapter</entity> 
  						    </adapter>
                            <target roleKind="Interface">
                                <entity>net.sourceforge.ganttproject.task.event.TaskListener</entity>
                            </target>
                            <adaptee roleKind="Class">
                                <entity>net.sourceforge.ganttproject.task.event.TaskHierarchyEvent</entity>
                            </adaptee>
                            <adaptee roleKind="Class">
                                <entity>net.sourceforge.ganttproject.task.event.TaskDependencyEvent</entity>
                            </adaptee>
                            <adaptee roleKind="Class">
                                <entity>net.sourceforge.ganttproject.task.event.TaskScheduleEvent</entity>
                            </adaptee>
                            <client roleKind="Class">
                                <entity>net.sourceforge.ganttproject.task.TaskManager</entity>
                            </client>
  					    </adapter>
  				    </roles>
  				    <comment> 
                            Ici, nous avons une architecture similaire à celle décrite dan le livre Design Patterns de Erich Gamma.
                            Elle est compose d'un client qui est une Interface, un Target qui est aussi une insterface,
                            un adapter sous forme d'abstract class et trois adaptees.
                            Remarque: Tous les methodes de la classe adapter "TaskListenerAdapter" sont vides.
                	</comment> </microArchitecture>
  		    </microArchitectures>
 	    </designPattern>
 	    
 	    <!-- Builder -->
 	    <designPattern name="Builder">
			<microArchitectures>
				<microArchitecture number="330">
					<roles>
						<directors>
							<director roleKind="Class">
								<entity>net.sourceforge.ganttproject.task.TaskManager.Access</entity>
							</director>
						</directors>
						<builders>
							<builder roleKind="AbstractClass">
								<entity>net.sourceforge.ganttproject.task.TaskManager</entity>
							</builder>	
						</builders>
						<concreteBuilders>
							<concreteBuilder roleKind="Class">
								<entity>net.sourceforge.ganttproject.task.TaskManagerImpl</entity>
							</concreteBuilder>
						</concreteBuilders>
						<products>
							<product roleKind="AbstractClass">
								<entity>net.sourceforge.ganttproject.task.algorithm.FindPossibleDependeesAlgorithmImpl</entity>
							</product>
							<product roleKind="AbstractClass">
								<entity>net.sourceforge.ganttproject.task.algorithm.AdjustTaskBoundsAlgorithm</entity>
							</product>
							<product roleKind="AbstractClass">
								<entity>net.sourceforge.ganttproject.task.algorithm.RecalculateTaskScheduleAlgorithm</entity>
							</product>
							<product roleKind="AbstractClass">
								<entity>net.sourceforge.ganttproject.task.algorithm.RecalculateTaskCompletionPercentageAlgorithm</entity>
							</product>
						</products>
					</roles>
					 <comment> 
                            Un Builder assez spéciale dans le sens ou le programmeur a mis le Director dans le même
                            fichier que le builder, et tous les product trouver sont des AbstractClass.
                	</comment> 
			</microArchitecture>
		</microArchitectures>
	</designPattern>
</program>
<program type="Java">
	<name>HolubSQL v1.0</name>	
		
		<!-- Flyweight -->
		<designPattern name="Flyweight">
			<microArchitectures>
				<microArchitecture number="71">
					<roles>
						<flyweightfactories>
							<flyweightfactory roleKind="Class">
								<entity>src.com.holub.jdbc.TableFactory</entity>
							</flyweightfactory>
						</flyweightfactories>
						<flyweights>
							<flyweight roleKind="AbstractClass">
								<entity>src.com.holub.jdbc.Table</entity>
							</flyweight>
						</flyweights>
						<concreteFlyweights>
							<concreteFlyweight roleKind="Class">
								<entity>src.com.holub.jdbc.UnmodifiableTable</entity>
							</concreteFlyweight>
								<concreteFlyweight roleKind="Class">
									<entity>src.com.holub.jdbc.concreteTable</entity>
								</concreteFlyweight>
							</concreteFlyweights>

					</roles>
				</microArchitecture>
			</microArchitectures>
		</designPattern>
		<!-- Iterator -->
		<designPattern name="Iterator">
			<microArchitectures>
				<microArchitecture number="72">
					<roles>
						<aggregates>
							<Aggregate roleKind="AbstractClass">
								<entity>src.com.holub.jdbc.Cursor</entity>
							</Aggregate>
						</aggregates>
						<concreteAggregates>
							<concreteAggregate roleKind="Class">
								<entity>src.com.holub.jdbc.concreteTable</entity>
							</concreteAggregate>
						</concreteAggregates>
						<iterators>
							<iterator roleKind="AbstractClass">
								<entity>java.util.iterator</entity>
							</iterator>
						</iterators>
						<concreteIterators>
							<concreteIterator roleKind="Class">
								<entity>src.com.holub.tools.ArrayIterator</entity>
							</concreteIterator>
						</concreteIterators>
					</roles>
				</microArchitecture>
			</microArchitectures>
		</designPattern>
		<!-- Adapter -->
		<designPattern name="Adapter">
			<microArchitectures>
				<microArchitecture number="73">
					<roles>
						<clients>
							<client roleKind="Class">
								<entity>src.com.holub.database.jdbc.JDBCResultSet</entity>
							</client>
						</clients>
						<adapters>
							<adapter roleKind="Class">
								<entity>src.com.holub.database.jdbc.adapters.ResultSetAdapter</entity>
							</adapter>
						</adapters>
						<adaptees>
							<adaptee roleKind="Class">
								<entity>java.sql.ResultSet</entity>
							</adaptee>
						</adaptees>
					</roles>
				</microArchitecture>
				<microArchitecture number="74">
					<roles>
						<clients>
							<client roleKind="Class">
								<entity>src.com.holub.database.jdbcJDBCStatement.</entity>
							</client>
						</clients>
						<adapters>
							<adapter roleKind="Class">
								<entity>src.com.holub.database.jdbc.adapters.StatementAdapter</entity>
							</adapter>
						</adapters>
						<adaptees>
							<adaptee roleKind="Class">
								<entity>java.sql.Statement</entity>
							</adaptee>
						</adaptees>
					</roles>
				</microArchitecture>
		</microArchitectures>
		
</designPattern>	
</program>
<program type="Java">
	<name>JTANS v1.0</name>	
     <!--
         L`équipe précédente a trouvé un patron Composite pour le package «src.net.phbwt.jtans.calc » 
         dont le composite est la classe « java.awt.composite », et le component est « CalcPiece », 
         alors java.awt.composite n`hérite pas de CalcPiece
     --> 
    <!-- Observer -->
    <designPattern name="Observer">
        <microArchitecture number="300">
            <roles>
                <observers>
                    <observer rolkind="Interface"><entity>java.awt.observer</entity></observer>
                </observers>
                <concreteObservers>
                    <concreteObserver roleKind="abstractClass"><entity>src.net.phbwt.jtans.AbstractApplication</entity></concreteObserver>
                    <concreteObserver roleKind="Class"><entity>src.net.phbwt.jtans.jTansApplet</entity></concreteObserver>
                    <concreteObserver roleKind="Class"><entity>src.net.phbwt.jtans.guimain.DisplayFigureComponent</entity></concreteObserver>
                    <concreteObserver roleKind="Class"><entity>src.net.phbwt.jtans.guimain.EditableFigureComponent</entity></concreteObserver>
                    <concreteObserver roleKind="Class"><entity>src.net.phbwt.jtans.guimain.MainWindow</entity></concreteObserver>
                </concreteObservers>
                <subjects>
					<subject roleKind="Class"><entity>java.util.Observable</entity></subject>
                </subjects>
				<concreteSubjects>
                    <concreteSubject roleKind="Class"><entity>src.net.phbwt.jtans.guimain.MainWindow</entity></concreteSubject>
                    <concreteSubject roleKind="Class"><entity>src.net.phbwt.jtans.guicommon.Config</entity></concreteSubject>
                    <concreteSubject roleKind="Class"><entity>src.net.phbwt.jtans.guiinfo.InfoWindowController</entity></concreteSubject>
				</concreteSubjects>
            </roles>
        </microArchitecture>
    </designPattern>

</program>
<program type="Java">
	<name>2 - Lexi v0.1.1 alpha</name>
	
	<designPattern name="Singleton">
		<microArchitectures>
			<microArchitecture number="01">
				<roles>
					<singletons>
						<singleton roleKind="Class"><entity>com.jmonkey.export.Registry</entity></singleton>
					</singletons>
				</roles>
			</microArchitecture>
			<microArchitecture number="02">
				<roles>
					<singletons>
						<singleton roleKind="Class"><entity>com.jmonkey.office.lexi.support.EditorActionManager</entity></singleton>
					</singletons>
				</roles>
			</microArchitecture>
		</microArchitectures>
	</designPattern>
	
	<designPattern name="Builder">
			<microArchitectures>
				<microArchitecture number="03">
					<roles>
						<builders>
							<builder roleKind="AbstractClass"><entity>com.jmonkey.office.lexi.support.Editor</entity></builder>
						</builders>
						<concreteBuilders>
							<concreteBuilder roleKind="Class"><entity>com.jmonkey.office.lexi.support.editors.HTMLEditor</entity></concreteBuilder>
							<concreteBuilder roleKind="Class"><entity>com.jmonkey.office.lexi.support.editors.RTFEditor</entity></concreteBuilder>
							<concreteBuilder roleKind="Class"><entity>com.jmonkey.office.lexi.support.editors.TEXTEditor</entity></concreteBuilder>
						</concreteBuilders>
						<directors>
							<director roleKind="Class"><entity>com.jmonkey.office.lexi.Main.DocumentFrame</entity></director>
						</directors>
						<products>
							<product rolekind="Class"><entity>java.io.File</entity></product>
						</products>
					</roles>
				</microArchitecture>
			</microArchitectures>
		</designPattern>
	
</program>
<program type="java">
	<name>Risk v1.0.7.5</name>
		<designPattern name="Adapter">
			<microArchitectures>
				<microArchitecture number="98">
					<roles>
						<clients>
							<client roleKind="AbstractClass">
								<entity>src.risk.RiskAdapter</entity>
							</client>
						</clients>
						<targets>
							<target roleKind="AbstractClass">
								<entity>src.risk.RiskListener</entity>
							</target>
						</targets>
						<adapters>
							<adapter roleKind="Class">
								<entity>src.risk.FlashRiskAdapter</entity>
							</adapter>
						</adapters>
						<adaptees>
							<adaptee roleKind="Class">
								<entity>src.risk.Risk</entity>
							</adaptee>
							<adaptee roleKind="Class">
								<entity>src.FlashGUI.MainMenu</entity>
							</adaptee>
							<adaptee roleKind="Class">
								<entity>src.FlashGUI.GameFrame</entity>
							</adaptee>
							<adaptee roleKind="Class">
								<entity>src.risk.FlashGUI.NewGameFrame</entity>
							</adaptee>
							<adaptee roleKind="Class">
								<entity>src.risk.FlashGUI.BattleDialog</entity>
							</adaptee>
						</adaptees>
					</roles>
				</microArchitecture>
			</microArchitectures>
		</designPattern>
</program>
<program type="java">
	<name>Juzzle v0.5</name>
	<!-- Ne contient pas de Design Patterns -->
</program>
<program type="java">
	<name>JSettlers v1.0.5</name>
 	<!-- Builder -->
	<designPattern name="Builder">
		<microArchitectures>
			<microArchitecture number="401">
				<roles>
					<directors>
						<director roleKind="Class"><entity></entity></director>
					</directors>
					<concreteBuilders>
						<concreteBuilder roleKind="Class"><entity>src.soc.game.SOCCity</entity></concreteBuilder>
						<concreteBuilder roleKind="Class"><entity>src.soc.game.SOCRoad</entity></concreteBuilder>
						<concreteBuilder roleKind="Class"><entity>src.soc.game.SOCSettlement</entity></concreteBuilder>
					</concreteBuilders>
					<builders>
						<builder roleKind="AbstractClass"><entity>src.soc.game.SOCPlayingPiece</entity></builder>
					</builders>
				</roles>
			</microArchitecture>
		</microArchitectures>
	</designPattern>
    <!-- Observer -->
	<designPattern name="Observer">
		<microArchitectures>
			<microArchitecture number="402">
				<roles>
					<subjects>
						<subject roleKind="AbstractClass"><entity>java.awt.Applet</entity></subject>
						<subject roleKind="AbstractClass"><entity>java.awt.Canvas</entity></subject>
						<subject roleKind="AbstractClass"><entity>java.awt.Dialog</entity></subject>
						<subject roleKind="AbstractClass"><entity>java.awt.Frame</entity></subject>
						<subject roleKind="AbstractClass"><entity>java.awt.Panel</entity></subject>
					</subjects>
					<observers>
						<observer roleKind="AbstractClass"><entity>java.awt.event.ActionListener</entity></observer>
						<observer roleKind="AbstractClass"><entity>java.awt.event.MouseListener</entity></observer>
					</observers>
					<concreteSubjects>
						<concreteSubject roleKind="Class"><entity>src.soc.client.ChannelFrame</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.ColorSquare</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCAccountClient</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCBoardPanel</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCBuildingPanel</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCChoosePlayerDialog</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCDialog</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCDiscoveryDialog</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCFaceButton</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCHandPanel</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCPlayerInterface</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.SOCPlayerClient</entity></concreteSubject>
						<concreteSubject roleKind="Class"><entity>src.soc.client.TradeOfferPanel</entity></concreteSubject>
					</concreteSubjects>
					<concreteObservers>
						<concreteObserver roleKind="Class"><entity>src.soc.client.ColorSquare</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCAccountClient</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCBoardPanel</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCBuildingPanel</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCChoosePlayerDialog</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCDialog</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCDiscoveryDialog</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCHandPanel</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCPlayerInterface</entity></concreteObserver>
						<concreteObserver roleKind="Class"><entity>src.soc.client.SOCPlayerClient</entity></concreteObserver>
					</concreteObservers>
				</roles>
			</microArchitecture>
		</microArchitectures>
	</designPattern>
</program>
</designPatterns>