Committed by
Gerrit Code Review
Added some protection again UiExtensions that return null inclusion streams.
Change-Id: I18545627da38f4c19fc8316d7fd07df44c5c608f
Showing
2 changed files
with
30 additions
and
13 deletions
| ... | @@ -16,6 +16,8 @@ | ... | @@ -16,6 +16,8 @@ |
| 16 | package org.onosproject.ui; | 16 | package org.onosproject.ui; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.ImmutableList; | 18 | import com.google.common.collect.ImmutableList; |
| 19 | +import org.slf4j.Logger; | ||
| 20 | +import org.slf4j.LoggerFactory; | ||
| 19 | 21 | ||
| 20 | import java.io.InputStream; | 22 | import java.io.InputStream; |
| 21 | import java.util.List; | 23 | import java.util.List; |
| ... | @@ -27,6 +29,8 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -27,6 +29,8 @@ import static com.google.common.base.Preconditions.checkNotNull; |
| 27 | */ | 29 | */ |
| 28 | public class UiExtension { | 30 | public class UiExtension { |
| 29 | 31 | ||
| 32 | + private final Logger log = LoggerFactory.getLogger(getClass()); | ||
| 33 | + | ||
| 30 | private static final String VIEW_PREFIX = "app/view/"; | 34 | private static final String VIEW_PREFIX = "app/view/"; |
| 31 | 35 | ||
| 32 | private final String prefix; | 36 | private final String prefix; |
| ... | @@ -73,7 +77,7 @@ public class UiExtension { | ... | @@ -73,7 +77,7 @@ public class UiExtension { |
| 73 | * @return CSS inclusion statements | 77 | * @return CSS inclusion statements |
| 74 | */ | 78 | */ |
| 75 | public InputStream css() { | 79 | public InputStream css() { |
| 76 | - return classLoader.getResourceAsStream(prefix + "css.html"); | 80 | + return getStream(prefix + "css.html"); |
| 77 | } | 81 | } |
| 78 | 82 | ||
| 79 | /** | 83 | /** |
| ... | @@ -82,7 +86,7 @@ public class UiExtension { | ... | @@ -82,7 +86,7 @@ public class UiExtension { |
| 82 | * @return JavaScript inclusion statements | 86 | * @return JavaScript inclusion statements |
| 83 | */ | 87 | */ |
| 84 | public InputStream js() { | 88 | public InputStream js() { |
| 85 | - return classLoader.getResourceAsStream(prefix + "js.html"); | 89 | + return getStream(prefix + "js.html"); |
| 86 | } | 90 | } |
| 87 | 91 | ||
| 88 | /** | 92 | /** |
| ... | @@ -102,8 +106,7 @@ public class UiExtension { | ... | @@ -102,8 +106,7 @@ public class UiExtension { |
| 102 | * @return resource input stream | 106 | * @return resource input stream |
| 103 | */ | 107 | */ |
| 104 | public InputStream resource(String viewId, String path) { | 108 | public InputStream resource(String viewId, String path) { |
| 105 | - InputStream is = classLoader.getResourceAsStream(VIEW_PREFIX + viewId + "/" + path); | 109 | + return getStream(VIEW_PREFIX + viewId + "/" + path); |
| 106 | - return is; | ||
| 107 | } | 110 | } |
| 108 | 111 | ||
| 109 | /** | 112 | /** |
| ... | @@ -114,4 +117,15 @@ public class UiExtension { | ... | @@ -114,4 +117,15 @@ public class UiExtension { |
| 114 | public UiMessageHandlerFactory messageHandlerFactory() { | 117 | public UiMessageHandlerFactory messageHandlerFactory() { |
| 115 | return messageHandlerFactory; | 118 | return messageHandlerFactory; |
| 116 | } | 119 | } |
| 120 | + | ||
| 121 | + // Returns the resource input stream from the specified class-loader. | ||
| 122 | + private InputStream getStream(String path) { | ||
| 123 | + InputStream stream = classLoader.getResourceAsStream(path); | ||
| 124 | + if (stream == null) { | ||
| 125 | + log.warn("Unable to find resource {}", path); | ||
| 126 | + } | ||
| 127 | + return stream; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + | ||
| 117 | } | 131 | } | ... | ... |
| ... | @@ -16,7 +16,7 @@ | ... | @@ -16,7 +16,7 @@ |
| 16 | package org.onosproject.ui.impl; | 16 | package org.onosproject.ui.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.ImmutableList; | 18 | import com.google.common.collect.ImmutableList; |
| 19 | -import org.onosproject.ui.UiExtension; | 19 | +import com.google.common.collect.ImmutableList.Builder; |
| 20 | import org.onosproject.ui.UiExtensionService; | 20 | import org.onosproject.ui.UiExtensionService; |
| 21 | 21 | ||
| 22 | import javax.ws.rs.GET; | 22 | import javax.ws.rs.GET; |
| ... | @@ -70,20 +70,23 @@ public class MainIndexResource extends AbstractInjectionResource { | ... | @@ -70,20 +70,23 @@ public class MainIndexResource extends AbstractInjectionResource { |
| 70 | 70 | ||
| 71 | // Produces an input stream including CSS injections from all extensions. | 71 | // Produces an input stream including CSS injections from all extensions. |
| 72 | private InputStream includeCss(UiExtensionService service) { | 72 | private InputStream includeCss(UiExtensionService service) { |
| 73 | - ImmutableList.Builder<InputStream> builder = ImmutableList.builder(); | 73 | + Builder<InputStream> builder = ImmutableList.builder(); |
| 74 | - for (UiExtension extension : service.getExtensions()) { | 74 | + service.getExtensions().forEach(ext -> add(builder, ext.css())); |
| 75 | - builder.add(extension.css()); | ||
| 76 | - } | ||
| 77 | return new SequenceInputStream(new StreamEnumeration(builder.build())); | 75 | return new SequenceInputStream(new StreamEnumeration(builder.build())); |
| 78 | } | 76 | } |
| 79 | 77 | ||
| 80 | // Produces an input stream including JS injections from all extensions. | 78 | // Produces an input stream including JS injections from all extensions. |
| 81 | private InputStream includeJs(UiExtensionService service) { | 79 | private InputStream includeJs(UiExtensionService service) { |
| 82 | - ImmutableList.Builder<InputStream> builder = ImmutableList.builder(); | 80 | + Builder<InputStream> builder = ImmutableList.builder(); |
| 83 | - for (UiExtension extension : service.getExtensions()) { | 81 | + service.getExtensions().forEach(ext -> add(builder, ext.js())); |
| 84 | - builder.add(extension.js()); | ||
| 85 | - } | ||
| 86 | return new SequenceInputStream(new StreamEnumeration(builder.build())); | 82 | return new SequenceInputStream(new StreamEnumeration(builder.build())); |
| 87 | } | 83 | } |
| 88 | 84 | ||
| 85 | + // Safely adds the stream to the list builder only if stream is not null. | ||
| 86 | + private void add(Builder<InputStream> builder, InputStream inputStream) { | ||
| 87 | + if (inputStream != null) { | ||
| 88 | + builder.add(inputStream); | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + | ||
| 89 | } | 92 | } | ... | ... |
-
Please register or login to post a comment