/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.impl;
import java.util.*;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.event.XModelTreeEvent;
import org.jboss.tools.common.model.filesystems.FilePathHelper;
import org.jboss.tools.common.model.util.XModelObjectUtil;
public class OpenedProjectsImpl extends OrderedObjectImpl {
private static final long serialVersionUID = 1L;
static final int MAX_PROJECT_COUNT = 10;
public OpenedProjectsImpl() {}
public void last(String name) {
XModelObject c = getChildByFile(name);
boolean reopen = (c != null);
if(!reopen) {
Properties p = new Properties();
p.setProperty(XModelObjectConstants.ATTR_NAME, name);
c = getModel().createModelObject("Workspace", p); //$NON-NLS-1$
addChild_0(c);
}
int i = getIndexOfChild(c);
if(reopen && i == 0) return;
while(i > 0) { children.move(i, i - 1); --i; }
if(reopen) {
fireStructureChanged(XModelTreeEvent.STRUCTURE_CHANGED, null);
} else {
fireStructureChanged(XModelTreeEvent.CHILD_ADDED, c);
}
c.setModified(true);
XModelObject[] os = children.getObjects();
if(os.length > MAX_PROJECT_COUNT)
for (int q = MAX_PROJECT_COUNT; q < os.length; q++) os[q].removeFromParent();
set("OPEN", XModelObjectConstants.YES); //$NON-NLS-1$
}
public XModelObject getChildByFile(String name) {
if(name == null) return null;
name = FilePathHelper.toPathPath(name);
name = name.replace('\\', '/');
XModelObject[] os = children.getObjects();
for (int i = 0; i < os.length; i++) {
String p = XModelObjectUtil.getExpandedValue(os[i], XModelObjectConstants.ATTR_NAME, null);
p = FilePathHelper.toPathPath(p);
if(name.equals(p.replace('\\', '/'))) return os[i];
}
return null;
}
}