blob: 5238105c0a840fdb58f142d46a89efabbb491489 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2018 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.examples.impactanalyzer.benchmark.preparation.model;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
public class XMIResourceWithSize extends XMIResourceImpl implements ResourceWithSize {
private int size = -1;
public XMIResourceWithSize(URI uri) {
super(uri);
}
/**
* If a size >=0 is provided, it is used as the result of {@link #getSize} regardless of
* actual resource contents.
*/
public XMIResourceWithSize(URI uri, int size) {
super(uri);
this.size = size;
}
/**
* Copies whatever is known of resourceWithSize's size. If the size is not yet known,
* the -1 is simply copied.
*/
public XMIResourceWithSize(URI uri, XMIResourceWithSize resourceWithSize) {
super(uri);
size = resourceWithSize.size;
}
/**
* Once the size has been queried, the result is cached and won't be updated anymore.
*/
public int getSize() {
if (size == -1) {
size = internalGetSize();
}
return size;
}
private int internalGetSize() {
int resourceSize = 0;
TreeIterator<EObject> iterator = getAllContents();
while(iterator.hasNext()){
iterator.next();
resourceSize++;
}
return resourceSize;
}
}