/*
* Copyright 2012 GitHub Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.mobile.core.repo;
import static org.eclipse.egit.github.core.event.Event.TYPE_CREATE;
import static org.eclipse.egit.github.core.event.Event.TYPE_FORK;
import static org.eclipse.egit.github.core.event.Event.TYPE_PUBLIC;
import static org.eclipse.egit.github.core.event.Event.TYPE_WATCH;
import android.text.TextUtils;
import org.eclipse.egit.github.core.Repository;
import org.eclipse.egit.github.core.User;
import org.eclipse.egit.github.core.event.Event;
import org.eclipse.egit.github.core.event.EventPayload;
import org.eclipse.egit.github.core.event.EventRepository;
import org.eclipse.egit.github.core.event.ForkPayload;
/**
* Helper to find a {@link RepositoryEventMatcher} to open for an event
*/
public class RepositoryEventMatcher {
/**
* Get {@link Repository} from {@link EventRepository} and actor
*
* @param repo
* @param actor
* @param org
* @return possibly null repository
*/
public static Repository getRepository(final EventRepository repo,
User actor, User org) {
if (repo == null)
return null;
String id = repo.getName();
int slash = id.indexOf('/');
if (slash == -1 || slash + 1 >= id.length())
return null;
Repository full = new Repository();
full.setId(repo.getId());
full.setName(id.substring(slash + 1));
String login = id.substring(0, slash);
// Use actor if it matches login parsed from repository id
if (actor != null && login.equals(actor.getLogin()))
full.setOwner(actor);
else if (org != null && login.equals(org.getLogin()))
full.setOwner(org);
else
full.setOwner(new User().setLogin(id.substring(0, slash)));
return full;
}
/**
* Get {@link Repository} from event
*
* @param event
* @return gist or null if event doesn't apply
*/
public Repository getRepository(final Event event) {
if (event == null)
return null;
EventPayload payload = event.getPayload();
if (payload == null)
return null;
String type = event.getType();
if (TYPE_FORK.equals(type)) {
Repository repository = ((ForkPayload) payload).getForkee();
// Verify repository has valid name and owner
if (repository != null && !TextUtils.isEmpty(repository.getName())
&& repository.getOwner() != null
&& !TextUtils.isEmpty(repository.getOwner().getLogin()))
return repository;
}
if (TYPE_CREATE.equals(type) || TYPE_WATCH.equals(type)
|| TYPE_PUBLIC.equals(type))
return getRepository(event.getRepo(), event.getActor(),
event.getOrg());
return null;
}
}