/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are 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
*/
/**
*
*/
package org.jabylon.common.resolver.impl;
import java.util.List;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.net4j.CDONet4jSession;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.common.util.URI;
import org.jabylon.cdo.connector.RepositoryConnector;
import org.jabylon.cdo.server.ServerConstants;
import org.jabylon.common.resolver.URIHandler;
import org.jabylon.properties.Resolvable;
import org.jabylon.properties.Workspace;
/**
* @author Johannes Utzig (jutzig.dev@googlemail.com)
*
*/
@Component
@Service
public class WorkspaceURIHandler implements URIHandler {
@Reference
private RepositoryConnector repositoryConnector;
private CDONet4jSession session;
private Workspace workspace;
@Activate
public void activate() {
session = repositoryConnector.createSession();
CDOView view = repositoryConnector.openView(session);
CDOResource workspaceResource = view.getResource(ServerConstants.WORKSPACE_RESOURCE);
workspace = (Workspace) workspaceResource.getContents().get(0);
}
@Deactivate
public void deactivate() {
session.close();
}
/*
* (non-Javadoc)
*
* @see
* org.jabylon.common.resolver.URIResolver#resolve(org.eclipse.emf
* .common.util.URI)
*/
@Override
public Object resolve(URI uri) {
if (uri==null || uri.isEmpty() || uri.segmentCount()==0)
return workspace;
String firstSegment = uri.segment(0);
if ("workspace".equals(firstSegment))
{
List<String> list = uri.segmentsList().subList(1, uri.segmentCount());
URI relativeURI = URI.createHierarchicalURI(list.toArray(new String[list.size()]), uri.query(), uri.fragment());
return workspace.resolveChild(relativeURI);
}
return null;
}
public void bindRepositoryConnector(RepositoryConnector connector) {
this.repositoryConnector = connector;
}
public void unbindRepositoryConnector(RepositoryConnector connector) {
this.repositoryConnector = null;
}
@Override
public boolean canHandle(URI uri) {
if (uri==null || uri.isEmpty() || uri.segmentCount()==0)
return true;
return "workspace".equals(uri.segment(0));
}
@Override
public boolean canHandle(Object o) {
return o instanceof Resolvable;
}
@SuppressWarnings("rawtypes")
@Override
public URI toURI(Object o) {
if (o instanceof Resolvable) {
Resolvable r = (Resolvable) o;
return r.toURI();
}
return null;
}
}