001/** 002 */ 003package org.nasdanika.html.model.bootstrap.impl; 004 005import java.lang.reflect.InvocationTargetException; 006import java.util.Collection; 007 008import org.eclipse.emf.common.notify.NotificationChain; 009 010import org.eclipse.emf.common.util.EList; 011 012import org.eclipse.emf.common.util.EMap; 013import org.eclipse.emf.ecore.EClass; 014import org.eclipse.emf.ecore.EObject; 015import org.eclipse.emf.ecore.EStructuralFeature; 016import org.eclipse.emf.ecore.InternalEObject; 017 018import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; 019import org.eclipse.emf.ecore.util.EcoreUtil; 020import org.eclipse.emf.ecore.util.InternalEList; 021import org.nasdanika.common.Util; 022import org.nasdanika.html.bootstrap.Color; 023import org.nasdanika.html.model.bootstrap.Appearance; 024import org.nasdanika.html.model.bootstrap.BootstrapPackage; 025import org.nasdanika.html.model.bootstrap.Border; 026import org.nasdanika.html.model.bootstrap.Spacing; 027import org.nasdanika.html.model.bootstrap.Text; 028 029/** 030 * <!-- begin-user-doc --> 031 * An implementation of the model object '<em><b>Appearance</b></em>'. 032 * <!-- end-user-doc --> 033 * <p> 034 * The following features are implemented: 035 * </p> 036 * <ul> 037 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getBackground <em>Background</em>}</li> 038 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getAttributes <em>Attributes</em>}</li> 039 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getBorder <em>Border</em>}</li> 040 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getMargin <em>Margin</em>}</li> 041 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getPadding <em>Padding</em>}</li> 042 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getText <em>Text</em>}</li> 043 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getFloat <em>Float</em>}</li> 044 * <li>{@link org.nasdanika.html.model.bootstrap.impl.AppearanceImpl#getChildren <em>Children</em>}</li> 045 * </ul> 046 * 047 * @generated 048 */ 049public class AppearanceImpl extends MinimalEObjectImpl.Container implements Appearance { 050 /** 051 * The default value of the '{@link #getBackground() <em>Background</em>}' attribute. 052 * <!-- begin-user-doc --> 053 * <!-- end-user-doc --> 054 * @see #getBackground() 055 * @generated 056 * @ordered 057 */ 058 protected static final Color BACKGROUND_EDEFAULT = null; 059 060 /** 061 * <!-- begin-user-doc --> 062 * <!-- end-user-doc --> 063 * @generated 064 */ 065 protected AppearanceImpl() { 066 super(); 067 } 068 069 /** 070 * <!-- begin-user-doc --> 071 * <!-- end-user-doc --> 072 * @generated 073 */ 074 @Override 075 protected EClass eStaticClass() { 076 return BootstrapPackage.Literals.APPEARANCE; 077 } 078 079 /** 080 * <!-- begin-user-doc --> 081 * <!-- end-user-doc --> 082 * @generated 083 */ 084 @Override 085 protected int eStaticFeatureCount() { 086 return 0; 087 } 088 089 /** 090 * <!-- begin-user-doc --> 091 * <!-- end-user-doc --> 092 * @generated 093 */ 094 @Override 095 public Color getBackground() { 096 return (Color)eDynamicGet(BootstrapPackage.APPEARANCE__BACKGROUND, BootstrapPackage.Literals.APPEARANCE__BACKGROUND, true, true); 097 } 098 099 /** 100 * <!-- begin-user-doc --> 101 * <!-- end-user-doc --> 102 * @generated 103 */ 104 @Override 105 public void setBackground(Color newBackground) { 106 eDynamicSet(BootstrapPackage.APPEARANCE__BACKGROUND, BootstrapPackage.Literals.APPEARANCE__BACKGROUND, newBackground); 107 } 108 109 /** 110 * <!-- begin-user-doc --> 111 * <!-- end-user-doc --> 112 * @generated 113 */ 114 @SuppressWarnings("unchecked") 115 @Override 116 public EMap<String, EObject> getAttributes() { 117 return (EMap<String, EObject>)eDynamicGet(BootstrapPackage.APPEARANCE__ATTRIBUTES, BootstrapPackage.Literals.APPEARANCE__ATTRIBUTES, true, true); 118 } 119 120 /** 121 * <!-- begin-user-doc --> 122 * <!-- end-user-doc --> 123 * @generated 124 */ 125 @SuppressWarnings("unchecked") 126 @Override 127 public EList<Border> getBorder() { 128 return (EList<Border>)eDynamicGet(BootstrapPackage.APPEARANCE__BORDER, BootstrapPackage.Literals.APPEARANCE__BORDER, true, true); 129 } 130 131 /** 132 * <!-- begin-user-doc --> 133 * <!-- end-user-doc --> 134 * @generated 135 */ 136 @SuppressWarnings("unchecked") 137 @Override 138 public EList<Spacing> getMargin() { 139 return (EList<Spacing>)eDynamicGet(BootstrapPackage.APPEARANCE__MARGIN, BootstrapPackage.Literals.APPEARANCE__MARGIN, true, true); 140 } 141 142 /** 143 * <!-- begin-user-doc --> 144 * <!-- end-user-doc --> 145 * @generated 146 */ 147 @SuppressWarnings("unchecked") 148 @Override 149 public EList<Spacing> getPadding() { 150 return (EList<Spacing>)eDynamicGet(BootstrapPackage.APPEARANCE__PADDING, BootstrapPackage.Literals.APPEARANCE__PADDING, true, true); 151 } 152 153 /** 154 * <!-- begin-user-doc --> 155 * <!-- end-user-doc --> 156 * @generated 157 */ 158 @Override 159 public Text getText() { 160 return (Text)eDynamicGet(BootstrapPackage.APPEARANCE__TEXT, BootstrapPackage.Literals.APPEARANCE__TEXT, true, true); 161 } 162 163 /** 164 * <!-- begin-user-doc --> 165 * <!-- end-user-doc --> 166 * @generated 167 */ 168 public NotificationChain basicSetText(Text newText, NotificationChain msgs) { 169 msgs = eDynamicInverseAdd((InternalEObject)newText, BootstrapPackage.APPEARANCE__TEXT, msgs); 170 return msgs; 171 } 172 173 /** 174 * <!-- begin-user-doc --> 175 * <!-- end-user-doc --> 176 * @generated 177 */ 178 @Override 179 public void setText(Text newText) { 180 eDynamicSet(BootstrapPackage.APPEARANCE__TEXT, BootstrapPackage.Literals.APPEARANCE__TEXT, newText); 181 } 182 183 /** 184 * <!-- begin-user-doc --> 185 * <!-- end-user-doc --> 186 * @generated 187 */ 188 @SuppressWarnings("unchecked") 189 @Override 190 public EList<org.nasdanika.html.model.bootstrap.Float> getFloat() { 191 return (EList<org.nasdanika.html.model.bootstrap.Float>)eDynamicGet(BootstrapPackage.APPEARANCE__FLOAT, BootstrapPackage.Literals.APPEARANCE__FLOAT, true, true); 192 } 193 194 /** 195 * <!-- begin-user-doc --> 196 * <!-- end-user-doc --> 197 * @generated 198 */ 199 @SuppressWarnings("unchecked") 200 @Override 201 public EMap<String, Appearance> getChildren() { 202 return (EMap<String, Appearance>)eDynamicGet(BootstrapPackage.APPEARANCE__CHILDREN, BootstrapPackage.Literals.APPEARANCE__CHILDREN, true, true); 203 } 204 205 /** 206 * <!-- begin-user-doc --> 207 * <!-- end-user-doc --> 208 * @generated NOT 209 */ 210 @Override 211 public Appearance effectiveAppearance(String path) { 212 if (Util.isBlank(path)) { 213 return EcoreUtil.copy(this); 214 } 215 int idx = path.indexOf("/"); 216 String childKey = idx == -1 ? path : path.substring(0, idx); 217 Appearance child = getChildren().get(childKey); 218 if (child == null) { 219 return EcoreUtil.copy(this); 220 } 221 Appearance ret = child.effectiveAppearance(idx == -1 ? null : path.substring(idx + 1)); 222 merge(ret); 223 return ret; 224 } 225 226 private void merge(Appearance effectiveAppearance) { 227 // TODO - put attribute keys if not present, set unset features such as color. Add to list features. 228 throw new UnsupportedOperationException("Appearance merging is not supported yet"); 229 } 230 231 /** 232 * <!-- begin-user-doc --> 233 * <!-- end-user-doc --> 234 * @generated 235 */ 236 @Override 237 public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { 238 switch (featureID) { 239 case BootstrapPackage.APPEARANCE__ATTRIBUTES: 240 return ((InternalEList<?>)getAttributes()).basicRemove(otherEnd, msgs); 241 case BootstrapPackage.APPEARANCE__BORDER: 242 return ((InternalEList<?>)getBorder()).basicRemove(otherEnd, msgs); 243 case BootstrapPackage.APPEARANCE__MARGIN: 244 return ((InternalEList<?>)getMargin()).basicRemove(otherEnd, msgs); 245 case BootstrapPackage.APPEARANCE__PADDING: 246 return ((InternalEList<?>)getPadding()).basicRemove(otherEnd, msgs); 247 case BootstrapPackage.APPEARANCE__TEXT: 248 return basicSetText(null, msgs); 249 case BootstrapPackage.APPEARANCE__FLOAT: 250 return ((InternalEList<?>)getFloat()).basicRemove(otherEnd, msgs); 251 case BootstrapPackage.APPEARANCE__CHILDREN: 252 return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs); 253 } 254 return super.eInverseRemove(otherEnd, featureID, msgs); 255 } 256 257 /** 258 * <!-- begin-user-doc --> 259 * <!-- end-user-doc --> 260 * @generated 261 */ 262 @Override 263 public Object eGet(int featureID, boolean resolve, boolean coreType) { 264 switch (featureID) { 265 case BootstrapPackage.APPEARANCE__BACKGROUND: 266 return getBackground(); 267 case BootstrapPackage.APPEARANCE__ATTRIBUTES: 268 if (coreType) return getAttributes(); 269 else return getAttributes().map(); 270 case BootstrapPackage.APPEARANCE__BORDER: 271 return getBorder(); 272 case BootstrapPackage.APPEARANCE__MARGIN: 273 return getMargin(); 274 case BootstrapPackage.APPEARANCE__PADDING: 275 return getPadding(); 276 case BootstrapPackage.APPEARANCE__TEXT: 277 return getText(); 278 case BootstrapPackage.APPEARANCE__FLOAT: 279 return getFloat(); 280 case BootstrapPackage.APPEARANCE__CHILDREN: 281 if (coreType) return getChildren(); 282 else return getChildren().map(); 283 } 284 return super.eGet(featureID, resolve, coreType); 285 } 286 287 /** 288 * <!-- begin-user-doc --> 289 * <!-- end-user-doc --> 290 * @generated 291 */ 292 @SuppressWarnings("unchecked") 293 @Override 294 public void eSet(int featureID, Object newValue) { 295 switch (featureID) { 296 case BootstrapPackage.APPEARANCE__BACKGROUND: 297 setBackground((Color)newValue); 298 return; 299 case BootstrapPackage.APPEARANCE__ATTRIBUTES: 300 ((EStructuralFeature.Setting)getAttributes()).set(newValue); 301 return; 302 case BootstrapPackage.APPEARANCE__BORDER: 303 getBorder().clear(); 304 getBorder().addAll((Collection<? extends Border>)newValue); 305 return; 306 case BootstrapPackage.APPEARANCE__MARGIN: 307 getMargin().clear(); 308 getMargin().addAll((Collection<? extends Spacing>)newValue); 309 return; 310 case BootstrapPackage.APPEARANCE__PADDING: 311 getPadding().clear(); 312 getPadding().addAll((Collection<? extends Spacing>)newValue); 313 return; 314 case BootstrapPackage.APPEARANCE__TEXT: 315 setText((Text)newValue); 316 return; 317 case BootstrapPackage.APPEARANCE__FLOAT: 318 getFloat().clear(); 319 getFloat().addAll((Collection<? extends org.nasdanika.html.model.bootstrap.Float>)newValue); 320 return; 321 case BootstrapPackage.APPEARANCE__CHILDREN: 322 ((EStructuralFeature.Setting)getChildren()).set(newValue); 323 return; 324 } 325 super.eSet(featureID, newValue); 326 } 327 328 /** 329 * <!-- begin-user-doc --> 330 * <!-- end-user-doc --> 331 * @generated 332 */ 333 @Override 334 public void eUnset(int featureID) { 335 switch (featureID) { 336 case BootstrapPackage.APPEARANCE__BACKGROUND: 337 setBackground(BACKGROUND_EDEFAULT); 338 return; 339 case BootstrapPackage.APPEARANCE__ATTRIBUTES: 340 getAttributes().clear(); 341 return; 342 case BootstrapPackage.APPEARANCE__BORDER: 343 getBorder().clear(); 344 return; 345 case BootstrapPackage.APPEARANCE__MARGIN: 346 getMargin().clear(); 347 return; 348 case BootstrapPackage.APPEARANCE__PADDING: 349 getPadding().clear(); 350 return; 351 case BootstrapPackage.APPEARANCE__TEXT: 352 setText((Text)null); 353 return; 354 case BootstrapPackage.APPEARANCE__FLOAT: 355 getFloat().clear(); 356 return; 357 case BootstrapPackage.APPEARANCE__CHILDREN: 358 getChildren().clear(); 359 return; 360 } 361 super.eUnset(featureID); 362 } 363 364 /** 365 * <!-- begin-user-doc --> 366 * <!-- end-user-doc --> 367 * @generated 368 */ 369 @Override 370 public boolean eIsSet(int featureID) { 371 switch (featureID) { 372 case BootstrapPackage.APPEARANCE__BACKGROUND: 373 return BACKGROUND_EDEFAULT == null ? getBackground() != null : !BACKGROUND_EDEFAULT.equals(getBackground()); 374 case BootstrapPackage.APPEARANCE__ATTRIBUTES: 375 return !getAttributes().isEmpty(); 376 case BootstrapPackage.APPEARANCE__BORDER: 377 return !getBorder().isEmpty(); 378 case BootstrapPackage.APPEARANCE__MARGIN: 379 return !getMargin().isEmpty(); 380 case BootstrapPackage.APPEARANCE__PADDING: 381 return !getPadding().isEmpty(); 382 case BootstrapPackage.APPEARANCE__TEXT: 383 return getText() != null; 384 case BootstrapPackage.APPEARANCE__FLOAT: 385 return !getFloat().isEmpty(); 386 case BootstrapPackage.APPEARANCE__CHILDREN: 387 return !getChildren().isEmpty(); 388 } 389 return super.eIsSet(featureID); 390 } 391 392 /** 393 * <!-- begin-user-doc --> 394 * <!-- end-user-doc --> 395 * @generated 396 */ 397 @Override 398 public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException { 399 switch (operationID) { 400 case BootstrapPackage.APPEARANCE___EFFECTIVE_APPEARANCE__STRING: 401 return effectiveAppearance((String)arguments.get(0)); 402 } 403 return super.eInvoke(operationID, arguments); 404 } 405 406} //AppearanceImpl