public virtual INode Filter(ref INodeResolver resolver, ref INodeAddress address, ref NodeType nodeType, out bool canCache) { string value; canCache = false; if (this.QueryKey == null) { value = "true"; } else { try { if (address.QueryValues[QueryKey] == null) { return(null); } value = (string)address.QueryValues[this.QueryKey]; } catch (KeyNotFoundException) { value = null; } } if (nodeType.Equals(NodeType.File) && value != null && value.ToLower() == "true") { canCache = true; var innerNodeType = nodeType.InnerType; if (innerNodeType == null) { innerNodeType = NodeType.File; } var query = StringUriUtils.BuildQuery ( address.QueryValues, QueryFilter ); var uri = address.AbsolutePath + "?" + query; return(new ShadowFile((IFile)resolver.Resolve(uri, innerNodeType), address)); } return(null); }
public override INode Filter(ref INodeResolver resolver, ref INodeAddress address, ref NodeType nodeType, out bool canCache) { string value; canCache = false; if (this.QueryKey == null) { return(null); } else { try { if (address.QueryValues[this.QueryKey] == null) { return(null); } value = (string)address.QueryValues[this.QueryKey]; } catch (KeyNotFoundException) { return(null); } } if (nodeType.Equals(NodeType.File)) { canCache = true; var query = StringUriUtils.BuildQuery ( address.QueryValues, pair => pair.Key.Equals(this.QueryKey, StringComparison.CurrentCultureIgnoreCase) ); var uri = address.AbsolutePath + "?" + query; var file = resolver.ResolveFile(uri); var service = (ITempIdentityFileService)file.GetService(new TempIdentityFileServiceType(value)); canCache = true; return(service.GetTempFile()); } return(null); }