System.err.println("notification actictivity sched");
	public void update (Observable obs, Object obj)	{		// s'il y a eu un changement d'etat dans ActivityScheduler		// (changement d'etat qd une activite est lanc?)		if (obs instanceof ActivityScheduler)		{			ActionManager.getInstance()					.getAction(Constants.ACTION_RUN_ACTIVITY).setEnabled(false);			System.err.println("notification actictivity sched");			// on recupere l'etat de l'application			AbstractActivityState state = (AbstractActivityState) obj;			// dans n'importe quel etat on peut toujours faire terminate et			// gotostep			ActionManager.getInstance().getAction(Constants.ACTION_SUSPEND)					.setEnabled(true);			ActionManager.getInstance().getAction(Constants.ACTION_GOTOSTEP)					.setEnabled(true);			if (state instanceof PreConditionCheckerState)			{				// on rafraichit la MainFrame				this.resetSplitPane();				this.showCheckList(state.getActivity());				// on active et desactive les actions				ActionManager.getInstance()						.getAction(Constants.ACTION_PREVIOUS).setEnabled(false);				ActionManager.getInstance().getAction(Constants.ACTION_NEXT)						.setEnabled(true);				if (state.getActivity().hasOutputProducts())				{					this.activateSuspend();				}				else				{					this.activateTerminate();				}			}			else if (state instanceof ActivityPresentationState)			{				// on rafraichit la MainFrame				this.resetSplitPane();				this.presentActivity(state.getActivity());				// s'il y a des produits en entrees ou des guides d'un type				// autre que "liste de controles" associe a l'activite (ou au				// role de cette activite) on active previous				if (state.getActivity().hasInputProducts()						|| state.getActivity().hasGuidanceWithoutType(								"Liste de controles")						|| state.getActivity().getRole()								.hasGuidanceWithoutType("Liste de controles"))				{					ActionManager.getInstance().getAction(							Constants.ACTION_PREVIOUS).setEnabled(true);				}				else					ActionManager.getInstance().getAction(							Constants.ACTION_PREVIOUS).setEnabled(false);				// s'il y a des etapes ou des produits en sorties on active le				// next				if (state.getActivity().hasSteps()						|| state.getActivity().hasOutputProducts()						|| state.getActivity().hasGuidanceType(								"Liste de controles")						|| state.getActivity().getRole().hasGuidanceType(								"Liste de controles"))				{					ActionManager.getInstance()							.getAction(Constants.ACTION_NEXT).setEnabled(true);				}				else					ActionManager.getInstance()							.getAction(Constants.ACTION_NEXT).setEnabled(false);				if (state.getActivity().hasOutputProducts())				{					this.activateSuspend();				}				else				{					this.activateTerminate();				}			}			else if (state instanceof StepState)			{				System.err						.println("MainFrame.update().state instanceof StepState");				// on rafraichit la MainFrame				this.resetSplitPane();				this.presentStep(state.getStep(), state.getIndex() + 1, state						.getStepList().size());				// on peut toujours faire previous car au minimum on reviendra				// en ActivityPresentation				ActionManager.getInstance()						.getAction(Constants.ACTION_PREVIOUS).setEnabled(true);				// si on est sur la derniere etape et qu'il n'y a pas :				// - des produits en sortie				// - des guides de type liste de controles sur le role ou				// l'activite				// on ne peut pas faire next				if (state.getIndex() == state.getStepList().size() - 1						&& (!state.getActivity().hasOutputProducts()								&& !state.getActivity().hasGuidanceType(										"Liste de controles") && !state								.getActivity().getRole().hasGuidanceType(										"Liste de controles")))				{					ActionManager.getInstance()							.getAction(Constants.ACTION_NEXT).setEnabled(false);				}				else				{					ActionManager.getInstance()							.getAction(Constants.ACTION_NEXT).setEnabled(true);				}				if (state.getActivity().hasOutputProducts())				{					this.activateSuspend();				}				else				{					this.activateTerminate();				}			}			else if (state instanceof PostConditionCheckerState)			{				// on rafraichit la MainFrame				this.resetSplitPane();				this.showEndCheckList(state.getActivity());				this.activateTerminate();				// on peut toujours faire previous car au minimum on reviendra				// en ActivityPresentation				ActionManager.getInstance()						.getAction(Constants.ACTION_PREVIOUS).setEnabled(true);				// on ne peut jamais faire next quand on est en				// PostConditionCheckerState				ActionManager.getInstance().getAction(Constants.ACTION_NEXT)						.setEnabled(false);			}			else			{				System.err						.println("ActivityScheduler est dans un etat inconnu !!!");			}			// on position la combo sur le bon item			// on initialise la comboBox du ButtonPanel			this.setMessagePanel(state);			this.buttonPanel.setSelectedIndex(state);			return;		}		// s'il y a eu un changement d'etat dans l'ApplicationManager		if (obs instanceof ApplicationManager)		{			// s'il l'objet passe est de type ActivityScheduler			// la MainFrame s'enregistre comme observer aupres de			// l'ActivityScheduler			if (obj instanceof ActivityScheduler)			{				ActivityScheduler activityScheduler = (ActivityScheduler) obj;				activityScheduler.addObserver(this);				// a l'entr?e dans un activit? on cr?e un nouveau panel de				// boutton que l'on pourra ajouter				// ensuite en bas				// on peut faire cela car obj est de type ActivityScheduler				// lorsque l'on vient de lancer une activit?				this.buttonPanel = new ButtonPanel();				// on initialise la combo box				this.buttonPanel.initComboBox(activityScheduler.getStateList());				this.jListPanel = new StepListPanel();				this.jListPanel.initJList(activityScheduler);			}			else if (obj instanceof InitState)			{				// on desactive les actions				ActionManager.getInstance().getAction(						Constants.ACTION_RUN_ACTIVITY).setEnabled(false);				ActionManager.getInstance().getAction(Constants.ACTION_NEXT)						.setEnabled(false);				ActionManager.getInstance()						.getAction(Constants.ACTION_PREVIOUS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TERMINATE).setEnabled(false);				ActionManager.getInstance().getAction(Constants.ACTION_SUSPEND)						.setEnabled(false);				ActionManager.getInstance()						.getAction(Constants.ACTION_GOTOSTEP).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TOOLSSETTINGS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_OPENPROCESS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_CLOSEPROJECT).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_NEXT_ITERATION).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_ALL_ITERATIONS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_CURRENT_ITERATION).setEnabled(						false);				// on affiche la fen?tre				this.setVisible(true);				this.setExtendedState(Frame.MAXIMIZED_BOTH);				// si aucun projet n'a ete creer on demande a l'utilisateur de				// le definir				// test si la valeur de la cl? workspace est d?finie ou pas				boolean validWorkspace = false;				boolean cancelChoice = false;				if (!PreferencesManager.getInstance().containWorkspace())				{					WorkspaceFileChooser workspaceChooser = new WorkspaceFileChooser();					while (!validWorkspace && !cancelChoice)					{						if (workspaceChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)						{							File file = workspaceChooser.getSelectedFile();							System.out.println(file.getPath());							// on verifie que le workspace choisi existe							// mettre le path dans le fichier preferences a la							// cl?							// "workspace"							if (file.exists())							{								PreferencesManager.getInstance().setWorkspace(										file.getPath());								validWorkspace = true;							}							else							{								// affichage d'un message d'erreur si le								// workspace est invalide								JOptionPane										.showMessageDialog(												this,												LanguagesManager														.getInstance()														.getString(																"WorkspaceException"),												LanguagesManager														.getInstance()														.getString(																"WorkspaceErrorTitle"),												JOptionPane.ERROR_MESSAGE);							}						}						else						{							cancelChoice = true;						}					}				}				else				{					// le workspace existe deja					validWorkspace = true;				}				// si le workspace n'est pas choisi on affiche un message				// d'erreur				if (!validWorkspace)				{					ActionManager.getInstance().getAction(							Constants.ACTION_NEWPROJECT).setEnabled(false);					ActionManager.getInstance().getAction(							Constants.ACTION_OPENPROJECT).setEnabled(false);					/*					 * ActionManager.getInstance().getAction(					 * Constants.ACTION_TIMEACTIVITY).setEnabled(false);					 */					ActionManager.getInstance().getAction(							Constants.ACTION_PREFERENCES).setEnabled(false);					// affichage d'un message d'erreur si le workspace n'est pas					// d?fini ou invalide					JOptionPane.showMessageDialog(this, LanguagesManager							.getInstance().getString("WorkspaceException"),							LanguagesManager.getInstance().getString(									"WorkspaceErrorTitle"),							JOptionPane.ERROR_MESSAGE);				}				// si le workspace est valide on degrise les actions				else				{					ActionManager.getInstance().getAction(							Constants.ACTION_NEWPROJECT).setEnabled(true);					ActionManager.getInstance().getAction(							Constants.ACTION_OPENPROJECT).setEnabled(true);					/*					 * ActionManager.getInstance().getAction(					 * Constants.ACTION_TIMEACTIVITY).setEnabled(true);					 */				}				this.reinitialize();			}			else if (obj instanceof ProjectOpenedState)			{				// on desactive run activity				ActionManager.getInstance().getAction(						Constants.ACTION_RUN_ACTIVITY).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TOOLSSETTINGS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_OPENPROCESS).setEnabled(true);				ActionManager.getInstance().getAction(						Constants.ACTION_CLOSEPROJECT).setEnabled(true);								// on change le titre de l'appli pour afficher le nom du projet//				 on recupere le nom du projet en cours				String nameProject = ApplicationManager.getInstance()						.getCurrentProject().getName();				// mettre le titre a jour				String title = Constants.APPLICATION_SHORT_NAME + " - " + nameProject;				this.setTitle(title);			}			else if (obj instanceof ProcessOpenedState)			{				this.showProcess();				ActionManager.getInstance().getAction(						Constants.ACTION_RUN_ACTIVITY).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TOOLSSETTINGS).setEnabled(true);				ActionManager.getInstance().getAction(Constants.ACTION_NEXT)						.setEnabled(false);				ActionManager.getInstance()						.getAction(Constants.ACTION_PREVIOUS).setEnabled(false);				ActionManager.getInstance()						.getAction(Constants.ACTION_GOTOSTEP).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TERMINATE).setEnabled(false);				// on degrise les menus d'iteration				ActionManager.getInstance().getAction(						Constants.ACTION_NEXT_ITERATION).setEnabled(true);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_ALL_ITERATIONS).setEnabled(true);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_CURRENT_ITERATION).setEnabled(						true);				// TODO fab pour tester le timeHandler				// TimeHandler th = new TimeHandler ();				// th.loadXML(				// ApplicationManager.getInstance().getCurrentProject().getName());				// th.affiche() ;				// th.fillModel(ApplicationManager.getInstance().getCurrentProcess()				// );				// th.loadModel(ApplicationManager.getInstance().getCurrentProcess()				// );				// System.err.println("fab");				// th.affiche();				// th.writeXML(ApplicationManager.getInstance().getCurrentProject().getName());				/*				 * final Collection <Activity > cactivity =				 * ApplicationManager.getInstance().getCurrentProcess().getAllActivities				 * (); for (Activity acty : cactivity) {				 * System.err.println(acty.getTime() ); }				 */			}			else if (obj instanceof ActivityLaunchedState)			{				//				 on grise les menus d'iteration				ActionManager.getInstance().getAction(						Constants.ACTION_NEXT_ITERATION).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_ALL_ITERATIONS).setEnabled(false);				ActionManager.getInstance().getAction(						Constants.ACTION_TIME_CURRENT_ITERATION).setEnabled(						false);			}		}	}