@Override
	protected void refreshVisuals() {
		ProviderCoverFigure figure = (ProviderCoverFigure) getFigure();
		XMLElement model = (XMLElement) getModel();
		EditorPart parent = (EditorPart) getParent();
		
		// set label - "provider name (type)"
		String name = XMLElementManipulator.getAttrValue(model, "name");
		figure.getProvider().getLabel().setText(name + " (" + model.getName() + ")");
		
		// set buses
		// FIXME don't create a new buses after each repaint
		List<XMLElement> busesData = XMLElementManipulator.getBuses(model);
		List<ProviderBusFigure> buses = new ArrayList<ProviderBusFigure>();
		for (XMLElement busData : busesData) {
			
			ProviderBusFigure bus = new ProviderBusFigure();
			if (busData.getName() != null) {
				bus.getLabel().setText(XMLElementManipulator.getAttrValue(busData, "busid"));
			}
			buses.add(bus);
		}
		figure.getProvider().setBuses(buses);
		
		// set size of figure
		Rectangle layout = model.getRectangle();
		if (layout == null) {
			layout = new Rectangle(rand.nextInt(300), rand.nextInt(300), 300, 28 + busesData.size() * 28);
			model.setRectangle(layout);
		}
	    parent.setLayoutConstraint(this, figure, layout);
	    
	    // refresh connections (refresh all services)
		@SuppressWarnings("unchecked")
		List<AbstractEditPart> temp = parent.getChildren();
		for (AbstractEditPart part : temp) {
			if (part instanceof ServicePart) {
				((ServicePart) part).refreshVisuals();
			}
		}
	}